Python基础之tkinter图形化界面学习

一、基础内容

import tkinter as tk
from PIL import Image,ImageTk

def my():
        pwin.destroy()
        win.deiconify()


win = tk.Tk()
#win.geometry(\'320x240+100+50\') #长320宽240 右100,下50
win[\'width\']=320   #可以用win.keys()查看哪些可以这样写
win[\'height\']=240 
win.title(\'tkinter图形化专题学习\')

#win.iconbitmap(\'my.ico\')
img=ImageTk.PhotoImage(image=Image.open(\'1.gif\',\'r\'))
win.iconphoto(False,img)
#win.withdraw()#临时退出
#win.deiconify()#恢复
#win.iconify()#最小化
#win.destroy()#关掉
#help(win.state)
\"\"\"
win.state(\'iconic\')
win.state(\'normal\')
win.state(\'zommed\')
win.state(\'zoomed\')
win.state(\'withdraw\')
\"\"\"
#win.attributes(\'-alpha\',0.5) #设置透明度
#win.attributes(\'-toolwindow\',1)#没有最大化最小化按钮
#win.attributes(\'-toolwindow\',0)#常规窗口
#win.attributes(\'-topmost\',1) #置顶

win.withdraw()  #隐藏原窗口
pwin=tk.Toplevel(win)  #新建弹窗
pwin.title(\'弹窗\')
pwin.protocol(\'WM_DELETE_WINDOW\',my)


win.mainloop()

二、渐变窗口与计时器

#计时器
import tkinter as tk
import time

def my():
    global x
    if x >1:
        return
    win.title(\'计时器:{:.2f}\'.format(x))
    win.attributes(\'-alpha\', x)
    x += 0.01
    
    win.after(200,my) #100ms
    
win = tk.Tk()
win.title(\"计时器\")
win[\'bg\']= \'lightblue\'  #用win.keys()查看
win.geometry(\'300x300\')
win.resizable(0,0) #不可变窗口大小

x = 0.01
win.attributes(\'-alpha\', x)
win.after(200,my)

win.mainloop()

三、简单的布局标签文本框按钮

3.1 布局

import tkinter as tk
win=tk.Tk()
win.title(\"布局\")
win.geometry(\'320x240\')
#win.resizable(0,0)
#定义
lbl=tk.Label(win,text=\"请输入\")
txt=tk.Entry(win)
btn=tk.Button(win,text=\"确定\")
#布局 方法一pack打包式放置 方法二grid表格式放置 方法三place任意放置
\"\"\"
lbl.pack(side=\'left\' ,padx=(10,0))
txt.pack(side=\'left\')   #txt.pack_info()查看pack的参数
btn.pack(side=\'left\', padx=\'10\')
\"\"\"
\"\"\"
lbl.grid(row=0,column=0,padx=(50,10),pady=10) #lbl.grid_info()查看grid的参数
txt.grid(row=0,column=1)
btn.grid(row=1,column=0,columnspan=2,padx=(50,0),pady=10, sticky=\'we\')
\"\"\"
lbl.place(relx=0.1,rely=0.2)
txt.place(relx=0.3,rely=0.15)
btn.place(relx=0.5,rely=0.25)
#win.mainloop()

3.2 布局

import tkinter as tk
#建窗口
win=tk.Tk()
win.title(\'布局\')
#建组件
frm=tk.Frame(win) #框架
#定义
lbl=tk.Label(frm,text=\'请输入\')
txt=tk.Entry(frm)
btn=tk.Button(win,text=\'确定\')

#布局
lbl.pack(side=\'left\', padx=10, pady=10)
txt.pack(side=\'left\', padx=10, pady=10)
frm.pack()
btn.pack(fill=\'x\')


win.mainloop()

四、摄氏度华氏度

import tkinter as tk
def myfun(e):
#def myfun():
    try:
        a=int(entry1.get())
        b=int(entry2.get())
        lbx.delete(0,\'end\')
        for i in range(a,b+1):
            f=i*9/5+32
            lbx.insert(\'end\',\'    {}           {}\'.format(i,f))
    except:
        pass


win=tk.Tk()
win.title(\'温度转换\')
win.resizable(0,0) #大小不可更改
label1 = tk.Label(win, text=\'请输入第1个整数\')
label2 = tk.Label(win, text=\'请输入第2个整数\')
label3 = tk.Label(win, text=\'摄氏温度   华氏温度\')
entry1 = tk.Entry(win)
entry2 = tk.Entry(win)
entry1.insert(0, \'10\')
entry2.insert(0, \'15\')
#btn=tk.Button(win, text=\'确定\',command=myfun)
btn=tk.Label(win, text=\'确定\',#把label变成按钮
             relief=\'groove\')  #浮雕
btn.bind(\'<Button-1>\', myfun) #用bing绑定 必须给函数参数 
lbx=tk.Listbox(win)

#滚动条
scr=tk.Scrollbar(win)
scr[\'command\']=lbx.yview
lbx[\'yscrollcommand\']=scr.set

label1.grid(row=1, column=0)
label2.grid(row=2, column=0)
label3.grid(row=0, column=2)

entry1.grid(row=1, column=1)
entry2.grid(row=2, column=1)
btn.grid(row=3, column=1, sticky=\"ew\")
lbx.grid(row=1, column=2, rowspan=3, padx=10, pady=10)
scr.grid(row=1, column=3, rowspan=3, sticky=\'ns\')
#btn.key()找到可以设置的参数 或者btn.config()

win.mainloop()

五、随机弹出数字(随机点名、抽奖)

import tkinter as tk
import random
def myfun():
    lst=list(range(100))
    name=random.choice(lst)
    lbl[\'text\']=name
    win.after(500,myfun)

win=tk.Tk()
win.title(\'抽奖程序\')

lbl=tk.Label(win,text=\'***\', width=6,font=\'-size 48\')
btn=tk.Button(win,text=\'开始\', font=\'-size 36\', command=myfun)

lbl.grid(row=0,column=0,padx=10,pady=10)
btn.grid(row=0,column=1,padx=10,pady=10)


#win.mainloop()

六、几行几列五子棋画布

import tkinter as tk

win=tk.Tk()
win.title(\'五子棋\')
win.geometry(\'800x600+64+32\')
win.resizable(0,0)

#建画布
cav=tk.Canvas(win, width=600,height=600, bg=\'yellow\')
rfm=tk.Frame(win,width=200,height=600, bg=\'lightyellow\')
cav.pack(side=\'left\')
rfm.pack(side=\'right\')

#画线
for i in range(1,20):
    x1, y1, x2, y2=30, i*30,19*30,i*30
    cav.create_line(x1,y1,x2,y2)
    cav.create_line(y1,x1,y2,x2)

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容