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/