Python標準庫中的Tkinter模組
阿新 • • 發佈:2019-01-23
先看例子:
#file tkintertest.py #python 自帶的圖形介面學習 import tkinter as tk import tkinter.messagebox as messagebox class Application(tk.Frame): def __init__(self, master=None): super().__init__(master) self.pack() self.createWidgets() def createWidgets(self): self.nameInput =tk.Entry(self,bg='yellow') self.nameInput.pack(padx=20,pady=30) self.helloLabel = tk.Label(self, text='你好,世界!',bg='pink',fg='green') self.helloLabel.pack(side="top") self.alertButton = tk.Button(self, text='你好', command=self.hello) self.alertButton.pack() self.quitButton = tk.Button(self, text='退出', fg='red',command=root.destroy) self.quitButton.pack(side="bottom") li = ['C','python','php','html','SQL','java'] movie = ['CSS','jQuery','Bootstrap'] self.listb = tk.Listbox(self) # 建立兩個列表元件 self.listb2 = tk.Listbox(self) for item in li: # 第一個小部件插入資料 self.listb.insert(0,item) for item in movie: # 第二個小部件插入資料 self.listb2.insert(0,item) self.listb.pack(side="left") # 將小部件放置到主視窗中 self.listb2.pack(side="right") def hello(self): name = self.nameInput.get() or '世界' messagebox.showinfo('Message', '你好, %s !' % name) root=tk.Tk() app = Application(master=root) # 設定視窗標題: app.master.title('你好,世界!') app.master.maxsize(1000,400) # 主訊息迴圈: app.mainloop() |
一、控制元件
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 是一個窗口布局管理的外掛,可以包含一個或者多個子控制元件。
LabelFrame 是一個簡單的容器控制元件。常用與複雜的窗口布局。
tkMessageBox 用於顯示你應用程式的訊息框。
二、佈局
1、pack()
pack()有以下幾個常用屬性:side、padx、pady、ipadx、ipady、fill、expand
1.1、side
side屬性有四個可選值:'top'、'bottom'、'left'、'right',分別表示將控制元件位置設在視窗頂部中心、底部中心、左邊中心、右邊中心。side預設值為'top'。
1.2、padx、pady、ipadx、ipady
這四個屬性分別設定控制元件水平方向外邊距、豎直方向外邊距、水平方向內邊距、豎直方向內邊距。
1.3、fill
fill屬性有四個可選值:'none'、'x'、'y'、'both'。分別表示不填充、將控制元件沿水平方向填充、將控制元件沿豎直方向填充、將控制元件沿水平和豎直方法填充。
當side屬性被設為'top'、'bottom'時,fill只能沿水平方向填充;當side屬性被設為'left'、'right'時,fill只能沿豎直方向填充。
1.4、expand
expand屬性有兩個可選值:0、1(或者'yes'、'no')。expand預設值為0。
當expand屬性為0時,前面所說的side、fill一切正常;當expand屬性為1時,side屬性無效,此時控制元件會在視窗中心位置,且fill既可沿水平方向填充,也可沿豎直方向填充。
2、grid()
grid()有以下幾個常用屬性:row、column、padx、pady、ipadx、ipady、rowspan、columnspan、sticky
2.1、row、column
grid()將視窗看做一張表格,將控制元件放在其中的單元格中,而row、column則用來設定控制元件所在單元格的座標。
例如:
#file:tkintertest2.py import tkinter as tk window = tk.Tk() window.title('tkinter測試') window.geometry('400x400') btn1 = tk.Button(window,text='按鈕一',width=5,bg='green') btn1.grid(row=0,column=0,rowspan=1,columnspan=2,sticky='W'+'N'+'S'+'E') btn2 = tk.Button(window,text='按鈕二',width=5,height=5,bg='red') btn2.grid(row=0,column=2) btn3 = tk.Button(window,text='按鈕三',width=3,height=3,bg='blue') btn3.grid(row=1,column=1) btn4 = tk.Button(window,text='按鈕四',width=15,height=10,bg='yellow') btn4.grid(row=1,column=2) window.mainloop() |
單元格的寬度、高度是由同一列中最寬、同一行中最高的控制元件的寬高決定的。
2.2、padx、pady、ipadx、ipady
這四個屬性分別設定控制元件水平方向外邊距、豎直方向外邊距、水平方向內邊距、豎直方向內邊距。
2.3、rowspan、columnspan
有時候,一個控制元件可能會佔用不止一個單元格,這時就要用到rowspan、columnspan,他們的作用與合併單元格類似。
rowspan=3表示該控制元件會在豎直方向佔用3行單元格;column=3則報表時該控制元件會在水平方向佔用3列單元格。
2.4、sticky
sticky屬性用於設定控制元件的對齊方式,其可選值有'N'、'S'、'E'、'W'以及這四個值的各種組合。
當stick屬性的值為這四個方向中的一個時,控制元件會向相應方向對齊;當stick屬性的值為其中兩個時,控制元件會向相應的一個角對齊;當stick屬性的值為其中三個、四個時,控制元件會先向前兩個設定的方向對齊,然後向後兩個方向進行填充。
3、place()
place()有以下幾個常用屬性:x、y、relx、rely、anchor
3.1、x、y
x、y屬性用來設定控制元件的絕對座標。
3.2、relx、rely
relx、rely屬性用來設定控制元件的相對座標,範圍為0-1。
可以同時使用相對座標和絕對座標,此時先根據相對座標確定控制元件位置,然後根據絕對座標使控制元件進行偏移,最後確定控制元件的最終位置。
3.3、anchor
anchor屬性有9個可選值,分別表示9個方向,用來設定控制元件的錨點。
NW, N, NE
W,CENTER,E
SW, S, SE
例如,anchor='nw',x=100,y=100表示控制元件的左上角將在座標(100,100)處,而anchor='n',x=100,y=100表示控制元件的頂邊中點將在座標(100,100)處。
4、Frame()
Frame()本身是tkinter中的一類控制元件,用來幫助我們進行佈局。