gui - tkinter 开发
GUI 用戶交互界面
?
tkinter 介紹
tkinter python自帶的gui庫,對圖形圖像處理庫tk的封裝
其他gui:pythonwin,wxpython,pyQT。。
概念介紹
組件:組成界面的構(gòu)成內(nèi)容就是組件。 按鈕,文本輸入框,滾動條,菜單,列表。。。
窗口:一個軟件的矩形區(qū)域
界面開發(fā)的最小內(nèi)容:
1.導(dǎo)入tkinter模塊
2.創(chuàng)建主窗口對象
3.將主窗口對象加入消息循環(huán)當(dāng)中
組件的擺放方式:
1.pack()方式 ->方向/方位擺放方法
2.grid()方式 ->網(wǎng)格擺放方法
3.place()方式 ->定位擺放方法(推薦)
?
pack()方式:(少用)
side 設(shè)置組件相對于父組件的擺放位置
ipadx,ipady 設(shè)置組件的內(nèi)部間距
padx,pady 設(shè)置多個組件之間的外部間距
expand 設(shè)置side是否失效
注意:僅僅使用pack無法實現(xiàn)表格方式,必須借助后面的Frame組件才可以實現(xiàn),非常復(fù)雜。
gird()方式:(少用)
row 設(shè)置行數(shù) 默認(rèn)為0
column 設(shè)置列數(shù) 默認(rèn)為0
rowspan 設(shè)置跨行數(shù)量
cloumnspan 設(shè)置跨列的數(shù)量
ipadx,ipady 設(shè)置組件內(nèi)部間距
padx,pady 設(shè)置多個組件之間的外部間距
place() 方式:
絕對定位布局:
x 設(shè)置距離左上角的水平長度 單位 都是像素
y 設(shè)置距離左上角的垂直高度 單位 都是像素
width 設(shè)置組件所占據(jù)的寬度 單位 都是像素
height 設(shè)置組件所占據(jù)的寬度 單位 都是像素
相對定位布局:
relx 設(shè)置距離左上角的水平長度(取值0~1)
rely 設(shè)置距離左上角的垂直高度(取值0~1)
relwidth 設(shè)置組件所占據(jù)的寬度(取值0~1)
relheight 設(shè)置組件所占據(jù)的寬度(取值0~1)
以上屬性設(shè)置都是相對于界面寬度或者高度的百分比,可以根據(jù)界面的帶下改變而改變~!
place()方式 ->定位擺放方法(推薦)----絕對位置----
1 #導(dǎo)入模塊 2 import tkinter 3 4 #創(chuàng)建主窗口對象 5 root = tkinter.Tk() 6 #大小 7 root.minsize(500,500) 8 9 #place()方式 ->定位擺放方法(推薦)----絕對位置----=========================== 10 #創(chuàng)建組件 11 btn1 = tkinter.Button(root,text = '按鈕1') 12 btn1.place(x = 100 ,y = 20,width= 50,height = 50) 13 14 #創(chuàng)建組件 15 btn2 = tkinter.Button(root,text = '按鈕2') 16 btn2.place(x = 200 ,y = 50,width = 300,height = 30) 17 18 #加入消息循環(huán) 19 root.mainloop()place()方式 ->定位擺放方法(推薦)----相對位置---- 1 #導(dǎo)入模塊 2 import tkinter 3 4 #創(chuàng)建主窗口對象 5 root = tkinter.Tk() 6 #大小 7 root.minsize(500,500) 8 9 #place()方式 ->定位擺放方法(推薦)----相對位置----=========================== 10 #創(chuàng)建組件 11 btn1 = tkinter.Button(root,text = '按鈕1') 12 btn1.place(relx = 0.2,rely = 0.1,relwidth = 0.1,relheight = 0.1) 13 14 #加入消息循環(huán) 15 root.mainloop()
tkinter組件:Button?按鈕的樣式
Label:標(biāo)簽控件,可以顯示文本
win:主窗口
text:顯示的文本內(nèi)容
bg:背景顏色
fg:字體顏色
font:設(shè)置字體屬性
wraplength:指定text文本中多款之后進(jìn)行換行
anchor:文本顯示的位置 n北 e東 s南 w西 center居中 ne se sw nw
justify:設(shè)置換行之后的對齊方式 1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.minsize(500,500) 6 ''' 7 8 #絕大部分尺寸的默認(rèn)單位是像素 9 btn1 = tkinter.Button(root,text='尺寸') 10 btn1.pack(ipadx = 100, ipady = 20) 11 ''' 12 13 ''' 14 15 #坐標(biāo)系(提示: 禁止同時使用兩種布局) 16 btn2 = tkinter.Button(root,text='坐標(biāo)系') 17 btn2.place(x = 100, y = 20) 18 19 ''' 20 21 #顏色: 22 #顏色單詞 23 btn3 = tkinter.Button(root,text='顏色',bg='gold') 24 btn3.pack() 25 26 #hex顏色模式 #紅色綠色藍(lán)色 0-255 ->> 使用十六進(jìn)制 27 btn4 = tkinter.Button(root,text='顏色',bg='#ff0000') 28 btn4.pack() 29 30 #字體 31 btn5 = tkinter.Button(root,text='字體',font = ('黑體',40,'bold','italic')) 32 btn5.pack() 33 34 #錨點 35 btn6 = tkinter.Button(root,text='錨點',anchor='sw') 36 btn6.pack(ipadx = 20, ipady = 20) 37 38 # 三維效果 39 btn7 = tkinter.Button(root,text='3',relief= tkinter.FLAT) 40 btn7.pack() 41 42 #位圖 43 btn8 = tkinter.Button(root,text='位圖',bitmap = 'question') 44 btn8.pack() 45 46 #鼠標(biāo)樣式 47 btn9 = tkinter.Button(root,text='鼠標(biāo)',cursor='heart') 48 btn9.pack(ipadx=30,ipady=20) 49 50 #圖片設(shè)置 51 #將圖片設(shè)置為圖像對象 52 long = tkinter.PhotoImage(file = 'long.gif') 53 btn10 = tkinter.Button(root,text='圖片',image=long) 54 btn10.pack() 55 56 #加入消息循環(huán) 57 root.mainloop()
?
1 import tkinter 2 3 # 創(chuàng)建一個主窗口 4 win = tkinter.Tk() 5 6 # 設(shè)置 標(biāo)題 7 win.title("python-13") 8 9 # 設(shè)置窗口大小和位置 10 win.geometry("500x500+200+50") 11 12 """ 13 Label:標(biāo)簽控件,可以顯示文本 14 win:主窗口 15 text:顯示的文本內(nèi)容 16 bg:背景顏色 17 fg:字體顏色 18 font:設(shè)置字體屬性 19 wraplength:指定text文本中多款之后進(jìn)行換行 20 anchor:文本顯示的位置 n北 e東 s南 w西 center居中 ne se sw nw 21 justify:設(shè)置換行之后的對齊方式 22 """ 23 label = tkinter.Label(win, 24 text = "this is a python test", 25 bg = "red", 26 fg = "yellow", 27 font = ("黑體",25), 28 height = 5, 29 width = 10, 30 wraplength = 100, 31 # anchor = "ne", 32 # justify = "center" 33 ) 34 label.pack() 35 36 #啟動主窗口 37 win.mainloop()?
tkinter組件:畫布
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry('500x500') 6 7 #創(chuàng)建畫布 8 canvas = tkinter.Canvas(root,bg='white') 9 canvas.pack() 10 11 #畫布中回值長方形 12 canvas.create_rectangle(20,20,100,100,fill='red',outline='yellow') 13 14 root.mainloop()?
tkinter組件:復(fù)選框
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry('500x500') 6 7 #創(chuàng)建組件 8 #checkbutton = tkinter.Checkbutton(root, text='同意此協(xié)議') #設(shè)置文本方法1 : 文本不變 9 10 #設(shè)置顯示內(nèi)容tkinter變量 11 text = tkinter.StringVar() 12 13 #設(shè)置內(nèi)容 14 text.set('同意嫁給你') 15 16 #設(shè)置復(fù)選框勾選與否的值 17 result = tkinter.IntVar() 18 19 #設(shè)置操作checkbutton的方法 20 def func(): 21 print(result.get()) 22 23 checkbutton = tkinter.Checkbutton(root,textvariable=text,variable=result,command=func,onvalue=66,offvalue=77) 24 checkbutton.pack() 25 26 root.mainloop()?
tkinter組件:文本框
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry('500x500') 6 7 #創(chuàng)建組件 8 #用戶名 9 username = tkinter.Entry(root,width=50,bg='yellow',fg='red') 10 username.pack() 11 12 #密碼 13 password = tkinter.Entry(root,show='*') 14 password.pack() 15 16 root.mainloop()?
1 """""" 2 """ 3 復(fù)選框 4 """ 5 6 import tkinter 7 8 # 創(chuàng)建一個主窗口 9 win = tkinter.Tk() 10 11 # 設(shè)置 標(biāo)題 12 win.title("python-13") 13 14 # 設(shè)置窗口大小和位置 15 win.geometry("500x500+200+50") 16 17 def func(): 18 message = "" 19 if res1.get(): 20 message += "張三\n" 21 if res2.get(): 22 message += "李四\n" 23 if res3.get(): 24 message += "王五\n" 25 26 text.delete(0.0,tkinter.END) 27 text.insert(tkinter.INSERT,message) 28 29 res1 = tkinter.BooleanVar() 30 check1 = tkinter.Checkbutton(win,text = "張三",variable = res1) 31 check1.pack() 32 33 res2 = tkinter.BooleanVar() 34 check2 = tkinter.Checkbutton(win,text = "李四",variable = res2) 35 check2.pack() 36 37 res3 = tkinter.BooleanVar() 38 check3 = tkinter.Checkbutton(win,text = "王五",variable = res3) 39 check3.pack() 40 41 text = tkinter.Text(win,width = 50,height = 20) 42 text.pack() 43 44 button = tkinter.Button(win,text = "submit",width = 10,height = 5,command = func) 45 button.pack() 46 47 #啟動主窗口 48 win.mainloop() 49 50 51 52 53 54 55 """""" 56 """ 57 復(fù)選框 58 """ 59 60 import tkinter 61 62 # 創(chuàng)建一個主窗口 63 win = tkinter.Tk() 64 65 # 設(shè)置 標(biāo)題 66 win.title("python-13") 67 68 # 設(shè)置窗口大小和位置 69 win.geometry("500x500+200+50") 70 71 def func(): 72 message = "" 73 if res1.get(): 74 message += "張三\n" 75 if res2.get(): 76 message += "李四\n" 77 if res3.get(): 78 message += "王五\n" 79 80 text.delete(0.0,tkinter.END) 81 text.insert(tkinter.INSERT,message) 82 83 res1 = tkinter.BooleanVar() 84 check1 = tkinter.Checkbutton(win,text = "張三",variable = res1) 85 check1.pack() 86 87 res2 = tkinter.BooleanVar() 88 check2 = tkinter.Checkbutton(win,text = "李四",variable = res2) 89 check2.pack() 90 91 res3 = tkinter.BooleanVar() 92 check3 = tkinter.Checkbutton(win,text = "王五",variable = res3) 93 check3.pack() 94 95 text = tkinter.Text(win,width = 50,height = 20) 96 text.pack() 97 98 button = tkinter.Button(win,text = "submit",width = 10,height = 5,command = func) 99 button.pack() 100 101 #啟動主窗口 102 win.mainloop()?
tkinter組件:框架
1 import tkinter 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry('500x500') 7 8 #創(chuàng)建框架1 9 frame1 = tkinter.Frame(root,bg='red',width=500,height=100) 10 frame1.pack(side='top') 11 12 #框架1中橫向擺放 13 btn1 = tkinter.Button(frame1,text='按鈕') 14 btn1.pack(side='left',padx=20) 15 16 btn2 = tkinter.Button(frame1,text='按鈕') 17 btn2.pack(side='left',padx=20) 18 19 btn3 = tkinter.Button(frame1,text='按鈕') 20 btn3.pack(side='left',padx=20) 21 22 #創(chuàng)建框架2 23 frame2 = tkinter.Frame(root,bg='green',width=500,height=100) 24 frame2.pack(side='top') 25 26 btn4 = tkinter.Button(frame2,text='按鈕') 27 btn4.pack(side='left',padx=20) 28 29 btn5 = tkinter.Button(frame2,text='按鈕') 30 btn5.pack(side='left',padx=20) 31 32 btn6 = tkinter.Button(frame2,text='按鈕') 33 btn6.pack(side='left',padx=20) 34 root.mainloop()?
tkinter組件:labelframe框架
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry('500x500') 6 7 #創(chuàng)建組件 8 labelframe = tkinter.LabelFrame(root,text='四大美女') 9 labelframe.pack(ipadx = 100) 10 11 #講其他組件擺放到labelframe中 12 btn1 = tkinter.Button(labelframe,text='貂蟬') 13 btn1.pack() 14 15 btn1 = tkinter.Button(labelframe,text='楊玉環(huán)') 16 btn1.pack() 17 18 btn1 = tkinter.Button(labelframe,text='西施') 19 btn1.pack() 20 21 btn1 = tkinter.Button(labelframe,text='王昭君') 22 btn1.pack() 23 24 root.mainloop()?
tkinter組件:標(biāo)簽
1 import tkinter # 標(biāo)簽 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry('500x500') 6 7 #創(chuàng)建組件 8 label = tkinter.Label(root,text='這是一個標(biāo)簽',fg = 'red') 9 label.pack() 10 11 root.mainloop()?
tkinter組件:列表盒子(列表框)
1 import tkinter # 列表盒子 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry('500x500') 7 8 #設(shè)置listbox的內(nèi)容 9 names = ('楊巔峰','鮑菊花','劉產(chǎn)','杜子騰','熊初墨') 10 11 #將數(shù)據(jù)轉(zhuǎn)換為tkinter的字符串變量 12 students = tkinter.StringVar(value=names) 13 14 #創(chuàng)建組件 15 listbox = tkinter.Listbox(root,listvariable=students) 16 listbox.pack() 17 18 root.mainloop()?
tkinter組件:菜單欄
1 import tkinter #菜單 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry('500x500') 7 8 #1.創(chuàng)建主菜單 9 bigmenu = tkinter.Menu(root) 10 #2.創(chuàng)建子菜單 11 filemenu = tkinter.Menu(bigmenu,tearoff=0) 12 #子菜單可以添加功能 13 filemenu.add_command(label='打開文件') 14 filemenu.add_command(label='保存文件') 15 16 filemenu.add_separator() 17 filemenu.add_command(label='另存為文件') 18 filemenu.add_command(label='導(dǎo)出文件') 19 filemenu.add_command(label='退出') 20 21 #3.將子菜單加入子菜單 22 bigmenu.add_cascade(label='文件',menu=filemenu) 23 24 25 #2.創(chuàng)建子菜單 26 editmenu = tkinter.Menu(bigmenu) 27 #3.將子菜單加入子菜單 28 bigmenu.add_cascade(label='編輯',menu=editmenu) 29 30 #4.將主菜單加入界面 31 32 root.config(menu=bigmenu) 33 34 35 root.mainloop()?
tkinter組件:option菜單(列表菜單)
1 import tkinter #option菜單 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry('500x500') 7 8 #創(chuàng)建變量接收結(jié)果 9 result = tkinter.StringVar() 10 result.set('請選擇問題') 11 #創(chuàng)建組件 12 optionmenu = tkinter.OptionMenu(root,result,'你的初戀是誰','你的初中老師是誰','你的初吻給了誰') 13 optionmenu.pack() 14 15 root.mainloop()?
tkinter組件:按鈕菜單
1 import tkinter #按鈕菜單 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry('500x500') 7 8 #創(chuàng)建組件 9 menubutton = tkinter.Menubutton(root,text='性別') 10 menubutton.pack() 11 12 sex = tkinter.StringVar() 13 #添加選項 14 menu = tkinter.Menu(menubutton,tearoff=0) 15 menu.add_radiobutton(label='男',variable=sex) 16 menu.add_radiobutton(label='女',variable=sex) 17 18 #將菜單配置到組件 19 menubutton.config(menu=menu) 20 root.mainloop()?
tkinter組件:劃分窗口
1 import tkinter # 劃分窗口 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry('500x500') 7 8 #創(chuàng)建組件 orient = 'vertical' 9 panedwindow = tkinter.PanedWindow(root,orient = 'horizontal') 10 11 #添加組件 12 btn1 = tkinter.Button(panedwindow,text='按鈕1112222') 13 btn2 = tkinter.Button(panedwindow,text='按鈕2') 14 15 panedwindow.add(btn1) 16 panedwindow.add(btn2) 17 18 panedwindow.pack(fill = 'both',expand='yes') 19 20 root.mainloop()?
tkinter組件:單選框
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry('500x500') 6 7 # 創(chuàng)建組件 8 sex = tkinter.StringVar() 9 10 radio1 = tkinter.Radiobutton(root,text='男',variable=sex,value='man') 11 radio1.pack() 12 13 radio2 = tkinter.Radiobutton(root,text='女',variable=sex,value='woman') 14 radio2.pack() 15 16 root.mainloop()?
tkinter組件:滾動條1
1 import tkinter #進(jìn)度條 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry('500x500') 6 7 #創(chuàng)建組件 8 scale = tkinter.Scale(root,orient='horizontal',from_=50,to= 80,resolution=0.5) 9 scale.pack() 10 11 root.mainloop()?
tkinter組件:滾動條2
1 import tkinter #滾動條 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry('500x500') 7 8 #簡單的滾動條 9 scroll = tkinter.Scrollbar(root) 10 scroll.pack(fill = 'y', side = 'right') 11 12 root.mainloop()?
tkinter組件:限定類型輸入框
1 import tkinter # 限定類型的輸入框 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry('500x500') 6 7 spinbox = tkinter.Spinbox(root,from_ = 0, to=120,increment = 0.5) 8 spinbox.pack() 9 10 root.mainloop()?
tkinter組件:多行文本框
1 import tkinter # 多行文本輸入框 2 3 root = tkinter.Tk() 4 5 #大小 6 root.geometry('500x500') 7 8 text = tkinter.Text(root,width = 50,height= 10) 9 text.pack() 10 11 #設(shè)置值 12 text.insert('0.0','你好啊,小姐姐') 13 root.mainloop()?
tkinter組件:彈出新窗口
1 import tkinter 2 root = tkinter.Tk() 3 4 #大小 5 root.geometry('500x500') 6 7 #聊天函數(shù) 8 9 def talk(): 10 #新窗口 11 newroot = tkinter.Toplevel() 12 13 # 彈出新窗口 14 btn = tkinter.Button(root,text='點擊開始對話',command = talk) 15 btn.pack() 16 17 root.mainloop()?
tkinter組件:消息對話框
1 #messagebox 消息對話框 2 import tkinter 3 #導(dǎo)入消息對話框子模塊 4 import tkinter.messagebox 5 6 #創(chuàng)建主窗口 7 root = tkinter.Tk() 8 #設(shè)置大小 9 root.minsize(300,300) 10 11 ''' 12 #聲明函數(shù) 13 def okcancel(): 14 #彈出對話框 15 result = tkinter.messagebox.askokcancel(title = 'okcancel',message = '先生,反已經(jīng)做好了,要吃飯碼?') 16 print(result) 17 18 19 #添加按鈕 20 btn1 = tkinter.Button(root,text = 'okcancel',command = okcancel) 21 btn1.pack() 22 23 24 #聲明函數(shù) 25 def question(): 26 # 彈出對話框 27 result = tkinter.messagebox.askquestion(title = 'question',message = '你是男人嗎?') 28 print(result) 29 #添加按鈕 30 btn2 = tkinter.Button(root,text = 'question',command = question) 31 btn2.pack() 32 33 34 #聲明函數(shù) 35 def retrycancel(): 36 # 彈出對話框 37 result = tkinter.messagebox.askretrycancel(title = 'retrycancel',message = '女生拒絕了你,你要繼續(xù)追碼??') 38 print(result) 39 #添加按鈕 40 btn3 = tkinter.Button(root,text = 'retrycancel',command = retrycancel) 41 btn3.pack() 42 43 #聲明函數(shù) 44 def yesno(): 45 # 彈出對話框 46 result = tkinter.messagebox.askyesno(title = 'yesno',message = '你喜歡日本人嗎?') 47 print(result) 48 #添加按鈕 49 btn4 = tkinter.Button(root,text = 'yesno',command = yesno) 50 btn4.pack() 51 52 53 54 #聲明函數(shù) 55 def error(): 56 # 彈出對話框 57 tkinter.messagebox.showerror(title = '出錯了',message = '你的年齡不符合要求!') 58 #添加按鈕 59 btn5 = tkinter.Button(root,text = 'error',command = error) 60 btn5.pack() 61 62 63 #聲明函數(shù) 64 def warning(): 65 # 彈出對話框 66 tkinter.messagebox.showwarning(title = '警告',message = '18歲以下禁止進(jìn)入') 67 #添加按鈕 68 btn6 = tkinter.Button(root,text = 'warning',command = warning) 69 btn6.pack() 70 ''' 71 72 #聲明函數(shù) 73 def info(): 74 # 彈出對話框 75 tkinter.messagebox.showinfo(title = '信息提示',message = '1區(qū)王者已上線!') 76 #添加按鈕 77 btn7 = tkinter.Button(root,text = 'info',command = info) 78 btn7.pack() 79 80 #加入消息循環(huán) 81 root.mainloop()?
tkinter組件:消息輸出框
1 #導(dǎo)入tkinter 2 import tkinter 3 #導(dǎo)入子模塊 4 import tkinter.simpledialog 5 6 #創(chuàng)建主界面 7 root = tkinter.Tk() 8 #設(shè)置大小 9 root.minsize(300,300) 10 11 ''' 12 def askname(): 13 result = tkinter.simpledialog.askstring(title = '獲取信息',prompt = '請輸入用戶名',initialvalue = '匿名') 14 print(result) 15 16 #添加按鈕 17 btn1 = tkinter.Button(root,text = '獲取用戶名',command = askname) 18 btn1.pack() 19 20 21 def askage(): 22 result = tkinter.simpledialog.askinteger(title = '獲取信息',prompt = '請輸入年齡',initialvalue = 18) 23 print(result) 24 25 #添加按鈕 26 btn2 = tkinter.Button(root,text = '獲取年齡',command = askage) 27 btn2.pack() 28 ''' 29 30 def askheight(): 31 result = tkinter.simpledialog.askfloat(title = '獲取信息',prompt = '請輸入身高(單位:米)',initialvalue = 0) 32 print(result) 33 34 #添加按鈕 35 btn3 = tkinter.Button(root,text = '獲取身高',command = askheight) 36 btn3.pack() 37 38 root.mainloop()?
tkinter組件:文件選擇框
1 #導(dǎo)入tkinter 2 import tkinter 3 #導(dǎo)入子模塊 4 import tkinter.filedialog 5 6 #help(tkinter.filedialog) 7 ''' 8 askdirectory(**options) 9 獲取一個文件夾的路徑 10 11 askopenfile(mode='r', **options) 12 打開文件獲取單個文件指針,具有open()的作用 13 14 askopenfiles(mode='r', **options) 15 打開文件獲取多個文件指針,具有open()的作用 16 17 askopenfilename(**options) 18 選擇單個文件,獲取其路徑 19 20 askopenfilenames(**options) 21 選擇多個文件,獲取其路徑 22 23 Returns a list of filenames or empty list if 24 cancel button selected 25 26 asksaveasfile(mode='w', **options) 27 Ask for a filename to save as, and returned the opened file 28 29 asksaveasfilename(**options) 30 選擇保存文件的路徑 31 32 33 ''' 34 35 36 #主界面 37 root = tkinter.Tk() 38 #設(shè)置大小 39 root.minsize(300,300) 40 41 42 ''' 43 #定義函數(shù) 44 def filename(): 45 path = tkinter.filedialog.askopenfilename() 46 print(path) 47 48 #添加按鈕觸發(fā) 49 btn1 = tkinter.Button(root,text = 'filename',command = filename) 50 btn1.pack() 51 ''' 52 53 ''' 54 #定義函數(shù) 55 def filenames(): 56 paths = tkinter.filedialog.askopenfilenames() 57 print(paths) 58 59 #添加按鈕觸發(fā) 60 btn2 = tkinter.Button(root,text = 'filenames',command = filenames) 61 btn2.pack() 62 ''' 63 64 ''' 65 #定義函數(shù) 66 def file(): 67 fp = tkinter.filedialog.askopenfile(mode = 'r') 68 print(fp) 69 70 #添加按鈕觸發(fā) 71 btn3 = tkinter.Button(root,text = 'file',command = file) 72 btn3.pack() 73 ''' 74 75 ''' 76 #定義函數(shù) 77 def dir(): 78 path = tkinter.filedialog.askdirectory() 79 print(path) 80 81 #添加按鈕觸發(fā) 82 btn4 = tkinter.Button(root,text = 'dir',command = dir) 83 btn4.pack() 84 ''' 85 86 ''' 87 #定義函數(shù) 88 def saveas(): 89 path = tkinter.filedialog.asksaveasfilename() 90 print(path) 91 92 #添加按鈕觸發(fā) 93 btn5 = tkinter.Button(root,text = 'saveas',command = saveas) 94 btn5.pack() 95 ''' 96 97 #參數(shù)設(shè)定 98 #定義函數(shù) 99 def filename(): 100 path = tkinter.filedialog.askopenfilename(initialdir = 'c:/',initialfile = 'abc.exe',title = '打開你心意的文件',filetypes = (('可執(zhí)行文件','*.exe'),('python file','*.py'),('所有文件','*.*'))) 101 print(path) 102 103 #添加按鈕觸發(fā) 104 btn1 = tkinter.Button(root,text = 'filename',command = filename) 105 btn1.pack() 106 107 root.mainloop()?
tkinter組件:顏色組件
1 #導(dǎo)入模塊 2 import tkinter 3 #導(dǎo)入子模塊 4 import tkinter.colorchooser 5 6 #主界面 7 root = tkinter.Tk() 8 root.minsize(300,300) 9 10 #函數(shù) 11 def color(): 12 result = tkinter.colorchooser.askcolor(color = '#ff9900') 13 print(result) 14 #設(shè)置界面背景顏色 15 root['bg'] = result[1] 16 17 #添加按鈕 18 btn = tkinter.Button(root,text = '選擇顏色',command = color) 19 btn.pack() 20 21 22 23 root.mainloop()?
tkinter組件:鍵盤-鼠標(biāo)?事件
1 #事件學(xué)習(xí): 2 #1.事件綁定函數(shù) 3 #2.事件類型 4 #3.事件對象 5 6 ''' 7 以按鈕為例: 8 1.為按鈕添加一個【點擊時候】的操作 ->事件類型 9 2.使用按鈕的【command參數(shù)指定類函數(shù)】 ->事件綁定函數(shù) 10 3.按鈕操作過程中的信息 ->事件對象 11 ''' 12 13 #1.事件綁定函數(shù)(3個) 14 ''' 15 1.組件.bind('事件類型',事件函數(shù)) 16 為一個組件綁定一個操作 17 2.組件.bind_class('組件類型','事件類型',事件函數(shù)) 18 為一類組件綁定一個操作 19 組件類型就是創(chuàng)建組件的方法名 例如按鈕組件:Button 20 3.組件.bind_all('事件類型',事件函數(shù)) 21 為所有組件綁定一個操作(所有操作都會當(dāng)作對主界面的操作) 22 ''' 23 24 #2.事件類型 25 ''' 26 鼠標(biāo)事件類型 27 <Button-1> 按下了鼠標(biāo)左鍵 <ButtonPress-1> 28 <Button-2> 按下了鼠標(biāo)中鍵 <ButtonPress-2> 29 <Button-3> 按下了鼠標(biāo)右鍵 <ButtonPress-3> 30 <Enter> 鼠標(biāo)進(jìn)入組件區(qū)域 31 <Leave> 鼠標(biāo)離開組件區(qū)域 32 <ButtonRelease-1> 釋放了鼠標(biāo)左鍵 33 <ButtonRelease-2> 釋放了鼠標(biāo)中鍵 34 <ButtonRelease-3> 釋放了鼠標(biāo)右鍵 35 <B1-Moion> 按住鼠標(biāo)左鍵移動 36 <B2-Moion> 按住鼠標(biāo)中鍵移動 37 <B3-Moion> 按住鼠標(biāo)右鍵移動 38 <Double-Button-1> 雙擊鼠標(biāo)左鍵 39 <Double-Button-2> 雙擊鼠標(biāo)中鍵 40 <Double-Button-3> 雙擊鼠標(biāo)右鍵 41 <MouseWheel> 滾動鼠標(biāo)滾輪 42 鍵盤事件類型 43 <KeyPress> 表示任何鍵盤按下 44 <KeyPress-A> 表示按下鍵盤A鍵 A可以設(shè)置為其他的按鍵 45 <Alt-KeyPress-A> 表示同時按下Alt和A鍵 A可以設(shè)置為其他的按鍵 46 <Control-KeyPress-A> 表示同時按下Ctrl和A鍵 A可以設(shè)置為其他的按鍵 47 <Shift-KeyPress-A> 表示同時按下Shift和A鍵 A可以設(shè)置為其他的按鍵 48 <Double-KeyPress-A> 表示雙擊鍵盤A鍵 A可以設(shè)置為其他的按鍵 49 <Lock-KeyPress-A> 表示開啟大寫之后鍵盤A鍵 A可以設(shè)置為其他的按鍵 50 <Alt-Control-KeyPress-A> 表示同時按下alt+Ctrl和A鍵 A可以設(shè)置為其他的按鍵 51 52 注意:鍵盤事件除了entry和text組件其他組件的事件最好綁定在主界面上 53 窗口和組件相關(guān)事件類型 54 Activate 當(dāng)中組件由不可以用變?yōu)榭捎脮r 針對于state的變值 55 Deactivate 當(dāng)組件由可用變?yōu)椴豢捎脮r觸發(fā) 56 Configure 當(dāng)組件大小發(fā)生變化時觸發(fā) 57 Destory 當(dāng)組件銷毀時觸發(fā) 58 FocusIn 當(dāng)組件獲取焦點時觸發(fā) 針對于Entry和Text有效 59 Map 當(dāng)組件由隱藏變?yōu)轱@示時觸發(fā) 60 UnMap 當(dāng)組件由顯示變?yōu)殡[藏時觸發(fā) 61 Perproty 當(dāng)窗口屬性發(fā)生變化時觸發(fā) 62 63 ''' 64 #3.事件對象 65 ''' 66 x,y 當(dāng)前觸發(fā)事件時鼠標(biāo)相對觸發(fā)事件的組件的坐標(biāo)值 67 x_root,y_root 當(dāng)前觸發(fā)事件時鼠標(biāo)相對于屏幕的坐標(biāo)值 68 char 獲取當(dāng)前鍵盤事件時按下的鍵對應(yīng)的字符 69 keycode 獲取當(dāng)前鍵盤事件時按下的鍵對應(yīng)的的ascii碼 70 type 獲取事件的類型 71 num 獲取鼠標(biāo)按鍵類型 123 左中右 72 widget 觸發(fā)事件的組件 73 width/height 組件改變之后的大小和configure()相關(guān) 74 75 ''' 76 77 #事件綁定的案例1: 78 import tkinter 79 80 root = tkinter.Tk() 81 root.minsize(300,200) 82 83 #單行文本 84 entry = tkinter.Entry(root) 85 entry.pack() 86 #事件函數(shù) 87 def changered(eventobj): 88 eventobj.widget['bg'] = 'red' 89 90 def changegreen(eventobj): 91 eventobj.widget['bg'] = 'green' 92 93 #事件綁定 94 entry.bind('<FocusIn>',changered) #entry獲取焦點組件 變紅 95 entry.bind('<FocusOut>',changegreen)#entry失去焦點組件 變綠 96 97 #注意:通過綁定函數(shù)操作,對應(yīng)的事件函數(shù),必須有形參接受事件對象。 98 # 事件函數(shù)必須在綁定之間定義 99 100 entry2 = tkinter.Entry(root) 101 entry2.pack() 102 103 #鍵盤事件 104 105 #變紅色 106 def changer(eventobj): 107 print('#@@@@@@@@@@@@@@') 108 eventobj.widget['bg'] = 'red' 109 110 #變綠色 111 def changeg(eventobj): 112 print('#@@@@@@@@@@@@@@') 113 eventobj.widget['bg'] = 'green' 114 115 root.bind('<Control-KeyPress-r>',changer) 116 root.bind('<Control-KeyPress-R>',changer) 117 118 root.bind('<Control-KeyPress-g>',changeg) 119 root.bind('<Control-KeyPress-G>',changeg) 120 121 root.mainloop()?
tkinter組件:鼠標(biāo)事件1
1 import tkinter 2 3 root = tkinter.Tk() 4 root.minsize(300,300) 5 6 #按鈕1 7 btn1 = tkinter.Button(root,text = '1') 8 btn1.place(x = 20,y = 20,width = 40,height = 40) 9 10 #按鈕1 11 btn2 = tkinter.Button(root,text = '2') 12 btn2.place(x = 80,y = 20,width = 40,height = 40) 13 14 #按鈕1 15 btn3 = tkinter.Button(root,text = '3') 16 btn3.place(x = 140,y = 20,width = 40,height = 40) 17 18 #按鈕1 19 btn4 = tkinter.Button(root,text = '4') 20 btn4.place(x = 20,y = 80,width = 40,height = 40) 21 22 #按鈕1 23 btn5 = tkinter.Button(root,text = '5') 24 btn5.place(x = 80,y = 80,width = 40,height = 40) 25 26 #按鈕6 27 btn6 = tkinter.Button(root,text = '6') 28 btn6.place(x = 140,y = 80,width = 40,height = 40) 29 30 def changebg(e): 31 e.widget['bg'] = 'green' 32 33 #綁定按鈕鼠標(biāo)進(jìn)入有事件 34 btn1.bind_class('Button','<Enter>',changebg) 35 36 37 def changebg(e): 38 e.widget['bg'] = 'yellow' 39 40 #綁定按鈕鼠標(biāo)離開有事件 41 btn1.bind_class('Button','<Leave>',changebg) 42 43 root.mainloop()?
tkinter組件:鼠標(biāo)事件2
1 import tkinter 2 3 root = tkinter.Tk() 4 root.minsize(300,300) 5 6 #按鈕 7 btn = tkinter.Button(root,text = '##########') 8 btn.pack() 9 10 #輸入框 11 entry = tkinter.Entry(root) 12 entry.pack() 13 14 #文本 15 text = tkinter.Text(root,width = 20,height = 5) 16 text.pack() 17 18 #函數(shù) 19 def changeentry(e): 20 entry['bg'] = 'cyan' 21 22 #事件綁定 23 btn.bind_all('<Button-1>',changeentry) 24 25 root.mainloop()?
轉(zhuǎn)載于:https://www.cnblogs.com/lws865/p/10946894.html
總結(jié)
以上是生活随笔為你收集整理的gui - tkinter 开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中运行.sql文件
- 下一篇: iOS开发如何避免安全隐患