(一)Python GUI 創建及添加部件


1 開始創建Python GUI

實現代碼:

1 import tkinter as tk
2 win = tk.Tk()
3 win.title("Python GUI")  
4 win.mainloop()

運行結果:

工作原理:

#1 導入tkinter模塊並簡化命名為tk。

#2 創建Tk類的一個實例並賦給實例變量win。

#3 根據實例變量win的title屬性定義窗口的標題。

#4 通過調用mainloop開啟窗口。

[注1]:運用Python類(class),首先需要創建一個類的實例,然后將實例賦給一個變量,此變量便具有與該類相同的功能屬性。

[注2]:mainloop讓GUI處於等待外部事件的無限循環中,當調用此循環后GUI窗口才會顯示在屏幕上。

2 禁止GUI窗口尺寸變動

實現代碼:

1 import tkinter as tk
2 win = tk.Tk()
3 win.title("Python GUI")
4 win.resizable(0, 0)
5 win.mainloop()

運行結果:用戶無法更改GUI窗口尺寸,窗口最大化按鈕呈灰色無法使用。

工作原理:

#4 resizable()是Tk類的一個方法,參數(0, 0)阻止窗口尺寸變更(通過傳遞其它參數可以實現自定義窗口初始尺寸)。

3 添加Label標簽並設置其文本屬性

實現代碼:

1 import tkinter as tk
2 from tkinter import ttk
3 win = tk.Tk()
4 win.title("Python GUI")
5 ttk.Label(win, text="A Label").grid(column=0, row=0)
6 win.mainloop()

運行結果:

工作原理:

#2 從tkinter中導入ttk模塊(tkinter的擴展,包含更高級的控件使窗口更加美觀化)。

#5 向ttk.Label()傳遞窗口實例win並設置其文本屬性(標簽顯示內容),啟用網格管理器設置標簽顯示位置坐標。

[注1]:相較前面窗口,此窗口尺寸變小。原因是當窗口中沒有添加控件時,tkinter會使用默認尺寸;當添加控件時,tkinter會在滿足定義控件正常顯示的前提下,選擇盡可能小的窗口尺寸。

4 添加Button按鈕並設置其文本屬性

實現代碼:

 1 import tkinter as tk
 2 from tkinter import ttk
 3 
 4 win = tk.Tk()
 5 win.title("Python GUI")
 6 
 7 # adding a label
 8 aLabel = ttk.Label(win, text="A Label")
 9 aLabel.grid(column=0, row=0)
10 
11 def clickMe():
12     action.configure(text="** I have been Clicked! **")
13     aLabel.configure(foreground='red')
14 
15 # adding a button
16 action = ttk.Button(win, text="Click Me!", command=clickMe)
17 action.grid(column=1, row=0)
18 
19 win.mainloop()

運行結果:

點擊按鈕前:

點擊按鈕后:

工作原理:

#11 事件處理函數,用於響應按鈕,執行對標簽和按鈕文本屬性的更改設置。

#16 創建按鈕控件,並設置命令為clickMe()函數以及其文本屬性。

5 添加text box文本框控件

實現代碼:

 1 import tkinter as tk
 2 from tkinter import ttk
 3 
 4 win = tk.Tk()
 5 win.title("Python GUI")
 6 
 7 # adding a label
 8 aLabel = ttk.Label(win, text="Enter a name:")
 9 aLabel.grid(column=0, row=0)
10 
11 def clickMe():
12     action.configure(text='Hello~' + name.get())
13 
14 # adding a button
15 action = ttk.Button(win, text="Click Me!", command=clickMe)
16 action.grid(column=1, row=1) 
17 
18 # adding a textbox entry widget
19 name = tk.StringVar()
20 nameEntered = ttk.Entry(win, width=12, textvariable=name)
21 nameEntered.grid(column=0, row=1)
22 
23 win.mainloop()

運行結果:

初始窗口:

文本框輸入Python並點擊按鈕后窗口:

工作原理:

#12 獲取文本框字符並將其設置為按鈕顯示文本。按鈕點擊事件是一個回調函數,當按鈕被用戶點擊后,此函數中涉及變量將被系統識別。基於此原理,點擊按鈕后即可獲取文本框輸入字符。

#19 聲明變量名name為適用於tkinter的StringVar()類型。

#20 創建文本框並設置寬度以及綁定文本框字符變量為name。

#21 設置文本框顯示位置坐標。

[注1]:Python是一種動態類型語言,是從所賦給變量的值來推斷變量的類型。例如,在給一個變量名賦值一個字符串后,此變量即成為字符串類型。

[注2]:在tkinter中,必須聲明變量名為StringVar()類型后才能正確使用,這是因為tkinter與Python並不是同一種語言,我們這里只是在Python中進行調用而已。

6 設置光標cursor和禁用GUI控件

添加代碼:

1 nameEntered.focus()
2 action.configure(state='disabled')

運行結果:

工作原理:

#1 通過調用tkinter控件實例的focus()方法給文本框設置光標。

#2 設置按鈕狀態屬性以禁用按鈕功能。

7 combo box組合框控件

添加代碼:

1 ttk.Label(win, text="Choose a number:").grid(column=1, row=0)
2 number = tk.StringVar()
3 numberChosen = ttk.Combobox(win, width=12, textvariable=number)
4 numberChosen['values'] = (1, 2, 4, 42, 100)
5 numberChosen.grid(column=1, row=1)
6 numberChosen.current(0)

運行結果:

工作原理:

#3 創建一個組合框控件,並設置其寬度和文本變量。

#4 設置下拉菜單中待選內容。

#5 設置組合框位置坐標。

#6 設置組合框默認顯示內容。

修改代碼:

1 numberChosen = ttk.Combobox(win, width=12, textvariable=number, state='readonly')
2 def clickMe():
3     action.configure(text='Hello~' + name.get() + ' ' + numberChosen.get())

運行結果:

工作原理:

#1 實現用戶只能選擇輸入下拉菜單中內容,無法輸入自定義內容。

#3 按鈕文本顯示文本框和組合框輸入內容。

8 創建不同初始狀態下checkbutton

添加代碼:

 1 # creating three checkbuttons
 2 chVarDis = tk.IntVar()
 3 check1 = tk.Checkbutton(win, text="Disabled", variable=chVarDis, state="disabled")
 4 check1.select()
 5 check1.grid(column=0, row=4, sticky=tk.W)
 6 
 7 chVarUn = tk.IntVar()
 8 check2 = tk.Checkbutton(win, text="Unchecked", variable=chVarUn)
 9 check2.deselect()
10 check2.grid(column=1, row=4, sticky=tk.W)
11 
12 chVarEn = tk.IntVar()
13 check3 = tk.Checkbutton(win, text="Enabled", variable=chVarEn)
14 check3.select()
15 check3.grid(column=2, row=4, sticky=tk.W)

運行結果:

工作原理:

#2 聲明變量名chVarDis為適用於tkinter的IntVar()類型。

#3 創建檢查按鈕。第一個參數為檢查按鈕放置的所在控件;第二個參數為檢查按鈕顯示標簽的文本內容;

#3 第三個參數為按鈕的狀態變量,將其與定義的IntVar()類型變量綁定。因為檢查按鈕的狀態(checked or unchecked)由0和1表示,故將#2中變量定義為IntVar()類型。

#4 通過調用select()方法在檢查按鈕前放置檢查符號√。

#5 設置檢查按鈕放置位置坐標,並將sticky設為tk.W(表示按鈕將以左對齊方式顯示)。

#9 通過調用deselect()方法在檢查按鈕前取消放置檢查符號√。

9 radio button單選按鈕控件

添加代碼:

 1 # radiobuttons globals
 2 COLOR1 = "Blue"
 3 COLOR2 = "Gold"
 4 COLOR3 = "Red"
 5 
 6 # radiobutton callback
 7 def radCall():
 8     radSel=radVar.get()
 9     if      radSel == 1: win.configure(background=COLOR1)
10     elif    radSel == 2: win.configure(background=COLOR2)
11     elif    radSel == 3: win.configure(background=COLOR3)
12 
13 # create three radionbuttons
14 radVar = tk.IntVar()
15 rad1 = tk.Radiobutton(win, text=COLOR1, variable=radVar, value=1, command=radCall)
16 rad1.grid(column=0, row=5, sticky=tk.W)
17 
18 rad2 = tk.Radiobutton(win, text=COLOR2, variable=radVar, value=2, command=radCall)
19 rad2.grid(column=1, row=5, sticky=tk.W)
20 
21 rad3 = tk.Radiobutton(win, text=COLOR3, variable=radVar, value=3, command=radCall)
22 rad3.grid(column=2, row=5, sticky=tk.W)

運行結果:

工作原理:

#2/3/4 創建模塊級全局變量,在創建單選框按鈕和設置背景顏色時用到。

#7 回調函數,根據用戶選擇設置窗口背景顏色。

#14 聲明變量名radVar為適用於tkinter的IntVar()類型,為三個單選按鈕所共用。

#15-22 創建三個單選按鈕,設置按鈕標簽顯示內容,綁定按鈕變量,設置數值及命令等。

10 scrolled text滾動文本框控件

實現代碼:

1 from tkinter import scrolledtext
2 
3 # Using  scrolled text control
4 scrolW = 30
5 scrolH = 3
6 
7 scr = scrolledtext.ScrolledText(win, width=scrolW, height=scrolH, wrap=tk.WORD)
8 scr.grid(column=0, columnspan=3)

運行結果:

工作原理:

#1 導入包含滾動文本框控件的模塊。

#4/5  設置滾動文本框控件的高度和寬度。

#7 創建滾動文本框控件,設置寬度和高度,並設置文本自動換行。

#8 通過設置columnspan=3使得滾動文本框將占用三列空間,而不是全部位於第一列。

11 將幾個控件添加到循環中

實現代碼:

 1 # change radiobuttons global variables into a list
 2 colors = ["Blue", "Gold", "Red"]
 3 
 4 radVar = tk.IntVar()
 5 radVar.set(99)
 6 
 7 for col in range(3):
 8     curRad = 'rad' + str(col)
 9     curRad = tk.Radiobutton(win, text=colors[col], variable=radVar, value=col, command=radCall)
10     curRad.grid(column=col, row=5, sticky=tk.W)
11 
12 def radCall():
13     radSel=radVar.get()
14     if      radSel == 0: win.configure(background=colors[0])
15     elif    radSel == 1: win.configure(background=colors[1])
16     elif    radSel == 2: win.configure(background=colors[2])

運行結果:

工作原理:

#2 創建一個列表來表示這幾個全局變量。

#5 設置一個單選按鈕之外的初始值(0~2之外的數值),否則在默認情況下,當窗口出現的同時將有一個單選按鈕被選中。

#7 將三個單選按鈕的創建和位置設置用一個for循環來實現。

#12 相應地修改回調函數中的索引號和背景顏色設置。

未完待續……

本文章屬於原創作品,歡迎大家轉載分享,禁止修改文章的內容。尊重原創,轉載請注明來自:躬耕南陽  https://www.cnblogs.com/yangmi511/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM