Python圖形用戶界GUI大解密(下篇)
上篇文章我們主要介紹了tkinter的安裝、基本部件、下拉菜單、畫布等內(nèi)容,Python圖形用戶界GUI大解密(上篇),這篇文章緊接著上篇文章繼續(xù)圍繞tkinter知識進行展開。
十、框架
又稱窗口,它是在原先的基礎上又創(chuàng)建一個窗口,一般課用于多個窗戶交互,如聊天,打游戲,我們來看下:
- fm = tk.Frame(root) #在root上創(chuàng)建一個frame
- fm.pack() #添加進去
- #在剛剛創(chuàng)建的frame上創(chuàng)建兩個frame
- f1= tk.Frame(fm)
- f2= tk.Frame(fm)
- #添加部件
- f1.pack()
- f2.pack()
- 分別給兩個frame添加兩個部件并且顏色不同,以便于區(qū)分
- tk.Label(f1, text='標簽一', bg='green').pack()
- tk.Button(f1, text='按鈕一', bg='green').pack()
- tk.Label(f2, text='標簽二', bg='red').pack()
- tk.Button(f2, text='按鈕二', bg='red').pack()
我們可以簡單的理解為在主窗口中放置了一個父窗口,然后這個父窗口又增添了兩個子窗口,每個子窗口都創(chuàng)建了兩個部件。這個部件在我們進行交互時還是挺有用的。
十一、彈窗,輸入
1.messagebox
接下來我們要說的就是彈窗了,我們一般需要提示的地方都需要窗口,還有確認返回什么的,下面來看看:
要想正常使用這些功能,我們需要先引入一個模塊messagebox(消息盒子),彈窗我們可以把它分為以下幾種:
注意先必須導入messagebox:
- from tkinter import messagebox
1.提示信息
- messagebox.showinfo(title='提示',message='你需要這么做')
2.警告
- messagebox.showwarning(title='警告',message='你不能這么做')
3.錯誤
- messagebox.showerror(title='錯誤',message='你做錯了')
前面幾個都是提示彈窗,下面介紹集中與用戶交互,可以讓用戶選擇的彈窗:
4.詢問選擇
- messagebox.askquestion(title='選擇',message='你是否這樣做')
5.確定或取消
- messagebox.askokcancel(title='選擇',message='你是否這樣做')
6.是,否
- messagebox.askyesno(title='選擇',message='你是否這樣做')
7.重試,取消
- messagebox.askretrycancel(title='選擇',message='你是否這樣做')
若是你想把這所有的類型集中到一個函數(shù)中設置了,也有,它就是_show()函數(shù),用法如下:
- messagebox._show函數(shù)的控制參數(shù):
- default 消息框按鈕
- icon 消息框圖標
- message 消息框所顯示的消息
- parent 消息框的父組件
- title 標題
- type 類型
2.simpledialog
為了提高用戶的交互,我們需要設置一些方框供用戶選擇,simpledialog是你必不可少的,來看下:
導入模塊:
- from tkinter import simpledialog
simpledialog提供三種類型輸入,即字符串 整數(shù) 浮點。我們來寫下:
- simpledialog.askinteger(title='顯示',prompt='輸入',initialvalue='12')
總體來說相當簡單,沒什么可說的。
十二、文件對話框
用于打開文件對話框,選擇文件或者文件夾,下面看看它有哪些用法吧:
首先我們先導入選擇文件模塊:
- from tkinter import filedialog
1.返回文件名
- filedialog.askopenfilename()
2.返回文件流對象
- filedialog.askopenfile()
3.返回多個文件流對象
- filedialog.askopenfiles()
4.返回多個文件名對象
- filedialog.askopenfilenames()
5.返回目錄名
- filedialog.askdirectory()
6.返回文件流并創(chuàng)建文件
- filedialog.asksaveasfile()
7.返回文件名保存
- filedialog.asksaveasfilename()
8.打開文件對話框顯示當前目錄所有文件文件夾
- filedialog.LoadFileDialog(root).go()
9.保存文件對話框
- filedialog.SaveFileDialog(root).go()
十三、樹型列表
它就好像一棵樹一樣,將它的子元素包裹在里面,同樣它的模塊也是在ttk里面,請看:
- from tkinter import ttk
- t = ttk.Treeview(root) #加載樹型控件
- t.pack()
- n=t.insert('',0,text="hello",values=("1")) #插入一個值到控件中
- n1=t.insert(n,1,text="cq",values=("2")) #插入一個屬于它的子元素也就是二級元素
- n2=t.insert(n,1,text="sc",values=("2"))
- t.insert(n1,2,text='fd',values=("3")) #插入一個屬于它的三級元素
- t.insert(n1,2,text='we',values=("3"))
- t.insert(n2,2,text='1',values=("3"))
- t.insert(n2,2,text='2',values=("3"))
就這樣可以一直循環(huán)插入,這樣就方便咱們列出大型項目的目錄了,你比如說磁盤目錄就可以用這個。
十四、顏色對話框
選擇顏色時使用,豐富的色彩可以讓你處理圖片畫圖,非常好用:
- from tkinter import colorchooser #導入模塊
- colorchooser.askcolor() #打開顏色選擇對話框
十五、組件排版
基本上所有的組件我們都介紹完了,相信大家通過對這章的學習應該對tkinter有了個深入的了解。
除了組件的用法之外,最重要的莫過于組件的排版了,下面我們來說一下,如何讓組件放對位置。
組件有三種排列方式:pack grid place.
1.pack
它是按照上下左右的方式來排列的,例如:
- tk.Label(root, text='1').pack(side='top')#上
- tk.Label(root, text='2').pack(side='bottom')#下
- tk.Label(root, text='3').pack(side='left')#左
- tk.Label(root, text='4').pack(side='right')#右
而且它還可以設置組件填充方式,如:
- tk.Label(root, text='1').pack(fill='y') #垂直填充
- tk.Label(root, text='2').pack(fill='x') #水平填充
- tk.Label(root, text='3').pack(fill='both') #水平垂直填充
- tk.Label(root, text='4').pack(fill='none') #不填
2.grid
它是一種網(wǎng)格布局,劃分為幾行幾列的樣子。所以它一般就是設置行,列。例如:
- tk.Label(root, text='1').grid(row=3, column=3)#第三行第三列插入一個1
還可以設置組件所跨越的行列數(shù)和內(nèi)外部間隔距離:
- tk.Label(root, text='1').grid(row=3, column=3,rowspan=3,ipadx=6)#跨3行單元格距離6
- tk.Label(root, text='2').grid(row=4, column=4,columnspa=3,pady=8)#跨3列邊框距離
3.place
這是一種最簡單靈活的布局,使用組件坐標來放置組件的位置。
- tk.Label(root,text='43').place(x=100,y=200,width=10,height=5) #距離左邊100,上邊200寬高為10X5
十六、鼠標鍵盤事件
講完布局接著該說說最重要的東西了,綁定事件,沒有這個東西組件都是沒有靈魂的。我總結(jié)了以下幾點:
- bind(sequence,func,add)
- bind_class(className,sequence,func,add)
- bind_all(sequence,func,add)
- 事件參數(shù):
- sequence 所綁定的事件;如‘<Control-n>’寓意為ctrl+N鍵 或者<Button-3> 右鍵
- func 所綁定的事件處理函數(shù);
- add 可選參數(shù),為空字符或‘+’;
- className 所綁定的類;
- 鼠標鍵盤事件
- <Button-1> 鼠標左鍵按下,2表示中鍵,3表示右鍵;
- <ButtonPress-1> 同上;
- <ButtonRelease-1> 鼠標左鍵釋放;
- <B1-Motion> 按住鼠標左鍵移動;
- <Double-Button-1> 雙擊左鍵;
- <Enter> 鼠標指針進入某一組件區(qū)域;
- <Leave> 鼠標指針離開某一組件區(qū)域;
- <MouseWheel> 滾動滾輪;
- <KeyPress-A> 按下A鍵,A可用其它鍵替代;
- <Alt-KeyPress-A> 同時按下alt和A;alt可用ctrl和shift替代;
- <Double-KeyPress-A> 快速按兩下A;
- <Lock-KeyPress-A> 大寫狀態(tài)下按A;
- 窗口事件
- Activate 當組件由不可用轉(zhuǎn)為可用時觸發(fā);
- Configure 當組件大小改變時觸發(fā);
- Deactivate 當組件由可用轉(zhuǎn)變?yōu)椴豢捎脮r觸發(fā);
- Destroy 當組件被銷毀時觸發(fā);
- Expose 當組件從被遮擋狀態(tài)中暴露出來時觸發(fā);
- Unmap 當組件由顯示狀態(tài)變?yōu)殡[藏狀態(tài)時觸發(fā);
- Map 當組件由隱藏狀態(tài)變?yōu)轱@示狀態(tài)時觸發(fā);
- FocusIn 當組件獲得焦點時觸發(fā);
- FocusOut 當組件失去焦點時觸發(fā);
- Property 當窗體的屬性被刪除或改變時觸發(fā);
- Visibility 當組件變?yōu)榭梢暊顟B(tài)時觸發(fā);
- 響應事件
- event對象(def function(event)):
- char 按鍵字符,僅對鍵盤事件有效;
- keycode 按鍵名,僅對鍵盤事件有效;
- keysym 按鍵編碼,僅對鍵盤事件有效;
- num 鼠標按鍵,僅對鼠標事件有效;
- type 所觸發(fā)的事件類型;
- widget 引起事件的組件;
- width,heigh 組件改變后的大小,僅Configure有效;
- x,y 鼠標當前位置,相對于窗口;
- x_root,y_root 鼠標當前位置,相對于整個屏幕
好了,以上就是我學習tkinter所總結(jié)的所有知識點,可能還有部分地方未補充清楚,希望大家多多指正。