精通Python——GUI編程學習

GUI的Python實現

1 實現

Tkinter是Python的默認GUI庫。它基於Tk工具包,該工具包最初是爲工具命令語言設計的。Tk 普及後,結合 Tk 的 GUI 開發的可移植性與靈活性,可以讓你快速開發和實現很多與商業軟件品質相當的 GUI 應用。

讓 GUI 程序啓動和運行起來需要以下 5 個主要步驟。
1.導入 Tkinter 模塊(或 from Tkinter import *)。
2.創建一個頂層窗口對象,用於容納整個 GUI 應用。
3.在頂層窗口對象之上構建所有的 GUI 組件。
4.通過底層的應用代碼將這些 GUI 組件連接起來。
5.進入主事件循環。

import tkinter

top = tkinter.Tk()                              #(小寫k)頂窗口
label = tkinter.Label(top,text='Hello GUI')     #控件
label.pack()                                    #佈局
top.mainloop()                                  #無限循環

解釋:

Tkinter.Tk()返回的對象通常稱爲根窗口,GUI 程序中可以有多個頂層窗口,但是其中只能有一個是根窗口。

頂層的根窗口對象包含組成 GUI 應用的所有小窗口對象。它們可能是文字標籤、按鈕、列表框等。這些獨立的 GUI 組件稱爲控件。

Tk 有 3 種佈局管理器來幫助控件集進行定位。 Placer:管理器就會將其擺放好;Packer:往行李箱中填充行李的過程;Grid:基於網格座標

2 控件

  • 控件可以獨立存在,也可以作爲容器存在。如果一個控件包含其他控件,就可以將其認爲是那些控件的父控件。

Frame容器

import tkinter

top = tkinter.Tk() #(小寫k)頂窗口
frame = tkinter.Frame()
label = tkinter.Label(frame,text='Hello GUI')#控件
label.pack()#佈局
frame.pack()
top.mainloop()#無限循環

其他容器:LabelFrame,Toplevel

  • 通常,控件有一些相關的行爲,比如按下按鈕、將文本寫入文本框等。這些用戶行爲稱爲事件,而 GUI 對這類事件的響應稱爲回調。
import tkinter

def buttonAction(event):                           #事件處理函數(event)
    print(event.x, event.y)

top = tkinter.Tk() #(小寫k)頂窗口
frame = tkinter.LabelFrame()
button = tkinter.Button(frame, text='這是一個按鈕')
button.bind('<Button-1>', buttonAction)            #綁定事件
button.pack()
frame.pack()
top.mainloop()#無限循環

解釋:

控件.bind('<事件代碼>',event_handler)        #適用於大多數控件。此外還有bind_all方法。

控件.protocal('事件代碼', event_handler)    #這種情況的控件,必需是頂層窗口或者root容器。

常用事件:

鼠標事件:
Event 	        Description
<Button-1> 	鼠標左鍵
<Button-3> 	鼠標右鍵
<Button-2> 	鼠標中鍵
<Button-4> 	鼠標向上滾動
<Button-5> 	鼠標向下滾動
<Double-Button-1> 	鼠標左鍵雙擊
<Double-Button-3> 	鼠標右鍵雙擊
<Double-Button-2> 	鼠標中鍵雙擊
<Triple-Button-1> 	鼠標左鍵三擊
<Triple-Button-3> 	鼠標右鍵三擊
<Triple-Button-2> 	鼠標中鍵三擊
<B1-Motion> 	左鍵移動
<B3-Motion> 	右鍵移動
<B2-Motion> 	中鍵移動
<ButtonRelease-1> 	釋放鼠標左鍵
<ButtonRelease-3> 	釋放鼠標右鍵
<ButtonRelease-2> 	釋放鼠標中鍵
<Enter> 	鼠標光標進入控件時觸發
<Leave> 	鼠標光標離開控件時觸發
鍵盤事件:
Event 	Description
<Key> 	響應所有的按鍵(按下)
<KeyRelease> 	響應所有的按鍵(鬆開)
<FocusIn> 	控件或控件的子空間獲得鍵盤焦點.
<FocusOut> 	控件丟失鍵盤焦點 (焦點移動到另一個控件).
<Return>/<Enter> 	只有回車鍵響應
<Escape> 	esc鍵
<space> 	空格鍵
<Tab> 	        Tab鍵
<Up>/<Down>/<Left>/<Right> 	上下左右鍵
<Shitf_L>/<Shift_R> 	        左右Shift鍵(類似有左右兩個鍵的, 添加_L/_R區分)
<BackSpace> 	           退格
<a>/<b> 	           指定的小寫字母鍵
<A>/<Z> 	           指定的大寫字母鍵
<Control-Alt-a> 	   組合鍵(可識別任意組合鍵)

作者:TitanCoder
鏈接:https://www.jianshu.com/p/6f88eff109e8

enent_handler事件響應的參數:

Tk

Tkinter Event Field

Tk

Tkinter Event Field

%f

focus

%A

char

%h

height

%E

send_event

%k

keycode

%K

keysym

%s

state

%N

keysym_num

%t

time

%T

type

%w

width

%W

widget

%x

x

%X

x_root

%y

y

%Y

y_root

  • 具體控件介紹:

1)button控件

Button ( master, option=value, ... )
master: 按鈕的父容器。
options: 可選項,即該按鈕的可設置的屬性。這些選項可以用鍵 = 值的形式設置,並以逗號分隔。

屬性:
activebackground 當鼠標放上去時,按鈕的背景色
activeforeground 當鼠標放上去時,按鈕的前景色
text 按鈕的文本內容
font 文本字體
bd   按鈕邊框的大小,默認爲 2 個像素
bg   按鈕的背景色
fg   按鈕的前景色(按鈕文本的顏色)
padx 按鈕在x軸方向上的內邊距(padding),是指按鈕的內容與按鈕邊緣的距離
pady 按鈕在y軸方向上的內邊距(padding)
height   按鈕的高度
width    按鈕的寬度,如未設置此項,其大小以適應按鈕的內容(文本或圖片的大小)
command  按鈕關聯的函數,當按鈕被點擊時,執行該函數
relief   邊框樣式,設置控件3D效果,可選的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默認爲 FLAT。
state    設置按鈕組件狀態,可選的有NORMAL、ACTIVE、 DISABLED。默認 NORMAL。
anchor   錨選項,控制文本的位置,默認爲中心
image    按鈕上要顯示的圖片
justify  顯示多行文本的時候,設置不同行之間的對齊方式,可選項包括LEFT, RIGHT, CENTER
underline        下劃線。默認按鈕上的文本都不帶下劃線。取值就是帶下劃線的字符串索引,爲 0 時,第一個字符帶下劃線,爲 1 時,前兩個字符帶下劃線,以此類推
wraplength       限制按鈕每行顯示的字符的數量
highlightcolor   要高亮的顏色
import tkinter
import tkMessageBox
 
def helloCallBack():
   tkMessageBox.showinfo( "彈窗", "Hello !")

top = tkinter.Tk()
B = Tkinter.Button(top, text ="點我", command = helloCallBack)
B.pack()
top.mainloop()

2)Entery

屬性:
bg    輸入框背景顏色 	
bd    邊框的大小,默認爲 2 個像素	
fg    文字顏色。值爲顏色或爲顏色代碼,如:'red','#ff0000'
font     文本字體
cursor   光標的形狀設定,如arrow, circle, cross, plus 等
width    文本框寬度
justify  顯示多行文本的時候,設置不同行之間的對齊方式,可選項包括LEFT, RIGHT, CENTER
relief   邊框樣式,設置控件3D效果,可選的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默認爲 FLAT。
show     指定文本框內容顯示爲字符,值隨意,滿足字符即可。如密碼可以將值設爲 show="*"
state    默認爲 state=NORMAL, 文框狀態,分爲只讀和可寫,值爲:normal/disabled
textvariable       文本框的值,是一個StringVar()對象
selectbackground   選中文字的背景顏色
selectborderwidth  選中文字的背景邊框寬度
selectforeground   選中文字的顏色
exportselection    在輸入框中選中文本,默認會複製到粘貼板,如果要忽略這個功能刻工藝設置 exportselection=0。
highlightcolor     文本框高亮邊框顏色,當文本框獲取焦點時顯示
xscrollcommand     設置水平方向滾動條,一般在用戶輸入的文本框內容寬度大於文本框顯示的寬度時使用。

常用方法:
get()  獲取文件框的值
delete ( first, last=None )  刪除文本框裏直接位置值
index ( index ) 返回指定的索引值
nsert ( index, s ) 向文本框中插入值,index:插入位置,s:插入值
select_clear()  清空文本框

 

1.3 佈局

top.pack() #自適應的佈局方案
top.grid() #網格佈局方案
top.place() #按座標的佈局方案

1) pack佈局的參數:

ipadx   水平方向上的內邊距
ipady   垂直方向上的內邊距
padx  水平方向上的外邊距
pady  垂直方向上的外邊距
after        將組件置於其他組件之後
before   將組件置於其他組件之前
anchor 組件的對齊方式,頂對齊’tk.N’,底對齊'tk.S’,左'tk.W',右'tk.E' ,中間'tk.CENTER',
side 組件在主窗口的位置,可以爲’top’,’bottom’,’left’,’right’;
fill  填充方式 (tk.Y垂直填充,tk.X水平填充,tk.BOTH爲兩邊填充,None爲不填充)
expand 1可擴展,0不可擴展

2) grid佈局的參數

sticky    #決定一個組件從哪個方向開始(tk.N上,tk.W左,tk.S下,tk.E右)
column #組件所在的列起始位置;
columnspan  #組件的列寬(佔用的列數);
row #組件所在的行起始位置;
rowspan #組件的行寬(佔用的行數);

3) place佈局的參數

anchor #組件對齊方式,同上;
x  #組件左上角的x座標;
y   #組件左上角的y座標;
relx #組件相對於窗口的x座標,應爲0-1之間的小數;
rely   #組件相對於窗口的y座標,應爲0-1之間的小數;
#可以同時使用相對座標和絕對座標,此時組件爲在相對座標的基礎上作絕對座標的偏移
width  #組件的寬度;
height #組件的高度;
relwidth  #組件相對於窗口的寬度,0-1之間;
relheight  #組件相對於窗口的高度,0-1之間;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章