Python GUI程式設計(Tkinter)
內容引自:https://www.runoob.com/python/python-gui-tkinter.html
Python GUI程式設計(Tkinter)
Python 提供了多個圖形開發介面的庫,幾個常用 Python GUI 庫如下:
-
Tkinter:Tkinter 模組(Tk 介面)是 Python 的標準 Tk GUI 工具包的介面 .Tk 和 Tkinter 可以在大多數的 Unix 平臺下使用,同樣可以應用在 Windows 和 Macintosh 系統裡。Tk8.0 的後續版本可以實現本地視窗風格,並良好地執行在絕大多數平臺中。
-
wxPython:wxPython 是一款開源軟體,是 Python 語言的一套優秀的 GUI 圖形庫,允許 Python 程式設計師很方便的建立完整的、功能健全的 GUI 使用者介面。
-
Jython:Jython 程式可以和 Java 無縫整合。除了一些標準模組,Jython 使用 Java 的模組。Jython 幾乎擁有標準的Python 中不依賴於 C 語言的全部模組。比如,Jython 的使用者介面將使用 Swing,AWT或者 SWT。Jython 可以被動態或靜態地編譯成 Java 位元組碼。
Tkinter 程式設計
Tkinter 是 Python 的標準 GUI 庫。Python 使用 Tkinter 可以快速的建立 GUI 應用程式。
由於 Tkinter 是內建到 python 的安裝包中、只要安裝好 Python 之後就能 import Tkinter 庫、而且 IDLE 也是用 Tkinter 編寫而成、對於簡單的圖形介面 Tkinter 還是能應付自如。
注意:Python3.x 版本使用的庫名為 tkinter,即首寫字母 T 為小寫。
import tkinter
建立一個GUI程式
- 1、匯入 Tkinter 模組
- 2、建立控制元件
- 3、指定這個控制元件的 master, 即這個控制元件屬於哪一個
- 4、告訴 GM(geometry manager) 有一個控制元件產生了。
例項1.(Python3.8.0)
import tkinter top=tkinter.Tk() #進入訊息迴圈 top.mainloop()
執行結果:
例項2:
# Python3.x 匯入方法 from tkinter import * root=Tk()# 建立視窗物件的背景色 # 建立兩個列表 li=['C','python','php','html','SQL','java'] movie=['CSS','jQuery','Bootstrap'] listb1=Listbox(root) # 建立兩個列表元件 listb2=Listbox(root) for item in li: # 第一個小部件插入資料 listb1.insert(0,item) for item in movie: # 第二個小部件插入資料 listb2.insert(0,item) listb1.pack() # 將小部件放置到主視窗中 listb2.pack() root.mainloop() # 進入訊息迴圈
執行結果:
Tkinter 元件
Tkinter的提供各種控制元件,如按鈕,標籤和文字框,一個GUI應用程式中使用。這些控制元件通常被稱為控制元件或者部件。
目前有15種Tkinter的部件。我們提出這些部件以及一個簡短的介紹,在下面的表:
控制元件 | 描述 |
---|---|
Button | 按鈕控制元件;在程式中顯示按鈕。 |
Canvas | 畫布控制元件;顯示圖形元素如線條或文字 |
Checkbutton | 多選框控制元件;用於在程式中提供多項選擇框 |
Entry | 輸入控制元件;用於顯示簡單的文字內容 |
Frame | 框架控制元件;在螢幕上顯示一個矩形區域,多用來作為容器 |
Label | 標籤控制元件;可以顯示文字和點陣圖 |
Listbox | 列表框控制元件;在Listbox視窗小部件是用來顯示一個字串列表給使用者 |
Menubutton | 選單按鈕控制元件,用於顯示選單項。 |
Menu | 選單控制元件;顯示選單欄,下拉選單和彈出選單 |
Message | 訊息控制元件;用來顯示多行文字,與label比較類似 |
Radiobutton | 單選按鈕控制元件;顯示一個單選的按鈕狀態 |
Scale | 範圍控制元件;顯示一個數值刻度,為輸出限定範圍的數字區間 |
Scrollbar | 滾動條控制元件,當內容超過視覺化區域時使用,如列表框。. |
Text | 文字控制元件;用於顯示多行文字 |
Toplevel | 容器控制元件;用來提供一個單獨的對話方塊,和Frame比較類似 |
Spinbox | 輸入控制元件;與Entry類似,但是可以指定輸入範圍值 |
PanedWindow | PanedWindow是一個窗口布局管理的外掛,可以包含一個或者多個子控制元件。 |
LabelFrame | labelframe 是一個簡單的容器控制元件。常用與複雜的窗口布局。 |
tkMessageBox | 用於顯示你應用程式的訊息框。 |
標準屬性
標準屬性也就是所有控制元件的共同屬性,如大小,字型和顏色等等。
屬性 | 描述 |
Dimension | 控制元件大小; |
Color | 控制元件顏色; |
Font | 控制元件字型; |
Anchor | 錨點; |
Relief | 控制元件樣式; |
Bitmap | 點陣圖; |
Cursor | 游標; |
幾何管理
Tkinter控制元件有特定的幾何狀態管理方法,管理整個控制元件區域組織,以下是Tkinter公開的幾何管理類:包、網格、位置
幾何方法 | 描述 |
pack() | 包裝; |
grid() | 網格; |
place() | 位置; |
例項3:
from tkinter import * tk=Tk() label=Label(tk,text='Welcom to Python Tkinter!') button=Button(tk,text="Click Me!") label.pack() button.pack() tk.mainloop()
執行結果:
Python——Button引數
anchor: 指定按鈕上文字的位置;
background(bg):指定按鈕的背景色;
bitmap:指定按鈕上顯示的點陣圖;
borderwidth(bd):指定按鈕邊框的寬度;
command: 指定按鈕訊息的回撥函式;
cursor: 指定滑鼠移動到按鈕上的指標樣式;
font: 指定按鈕上文字的字型;
foreground(fg):指定按鈕的前景色;
height: 指定按鈕的高度;
image: 指定按鈕上顯示的圖片;
state:指定按鈕的狀態(disabled);
text: 指定按鈕上顯示的文字;
width: 指定按鈕的寬度
padx: 設定文字與按鈕邊框x的距離,還有pady;
activeforeground:按下時前景色
textvariable:可變文字,與StringVar等配合著用
例項4:定義兩個按鈕,響應使用者事件
1 #響應使用者事件 2 from tkinter import * 3 #以下定義了processOk()和processCancel()兩個回撥函式,用於響應button被點選後的事件 4 def processOK(): 5 print("OK button is clicked!") 6 7 def processCancel(): 8 print("Cancel button is clicked!") 9 10 def main(): 11 tk=Tk()#建立視窗 12 tk.title("定義兩個按鈕,響應使用者事件")#設定視窗標題 13 14 #button建構函式裡tk控制元件是設定其父控制元件,command是回撥函式,fg指定按鈕的前景色,bg 指定按鈕的背景色 15 btnOK=Button(tk,text="OK",fg="red",command=processOK) 16 btnCancel=Button(tk,text="Cancel",bg="yellow",command=processCancel) 17 18 #以下是使用pack()方法進行預設的Pack佈局 19 btnOK.pack() 20 btnCancel.pack() 21 22 tk.mainloop()#啟動主視窗的訊息迴圈 23 24 if __name__=='__main__': 25 main()
執行結果如下:
pack()方法通常可支援如下選項:
anchor:當可用空間大於元件的需求的大小時,該選項決定元件被放置於容器的何處,該選項支援N(北代表上)、E(東代表右)、S(南代表下)、W(西代表左)、NW(西北代表左上)、NE(東北代表右上)、SW(西南代表左下)、SE(東南代表右下)、CENTER(中、預設值為CENTER)這些值。
expand:該bool值指定當父容器增大時是否拉伸該元件。
fill:設定元件是否沿水平或垂直方向填充,該選項支援NONE、X、Y或BOTH四個值,其中NONE表示不填充,BOTH表示沿著兩個方向填充。
ipadx:指定該元件在x方向(水平)上的內部留白(padding)。
ipady:指定該元件在y方向(水平)上的內部留白(padding)。
padx:指定該元件在x方向(水平)與其他元件的間距。
pady:指定該元件在y方向(水平)與其他元件的間距。
side:設定該元件的新增位置,可設定為TOP、BOTTOM、LEFT或RIGHT這四個值的其中之一。
當程式前面比較複雜時,程式就需要使用多個容器(Frame)進行分開佈局,然後再將Frame新增到視窗中。
例項5:畫布顯示文字、圖片和繪製圖形
1 #畫布顯示文字、圖片和繪製圖形 2 from tkinter import * 3 4 def main(): 5 tk=Tk() 6 tk.title("畫布顯示文字、圖片和繪製圖形") 7 8 #建立畫布物件 9 10 canvas=Canvas(tk,width=200,height=200) 11 canvas.pack() 12 #建立物件,通過create_text(),create_image(),create_rectangle()建立物件 13 #PhotoImage()只支援*.gif格式 14 canvas.create_text(80,40,text='歡迎關注衡水二中!',fill='blue',font=('Times',12)) 15 myImage=PhotoImage(file='二中.gif') 16 canvas.create_image(10,70,anchor=NW,image=myImage) 17 canvas.create_rectangle(10,30,150,50,outline='red') 18 19 20 tk.mainloop() 21 if __name__=='__main__': 22 main()
執行結果: