Python编程:Tkinter图形界面设计(2)
一、Button控件
????????Button 控件是一個標準的 Tkinter 部件,用于實現各種按鈕。按鈕可以包含文本或圖
像,還可以關聯 Python 回調函數。Tkinter 的按鈕被按下時,會自動調用回調函數。
????????按鈕文本可跨越一個以上的行。此外,文本字符可以有下劃線,例如標記的鍵盤快捷
鍵。默認情況下,使用 Tab 鍵可以移動到一個按鈕部件,用法如下:Entry(根對象, [屬性列表]),即Entry(root, option...)
1.1 常用的屬性列表如下:
| 1 | activebackground當鼠標放上去時,按鈕的背景色 |
| 2 | activeforeground當鼠標放上去時,按鈕的前景色 |
| 3 | bd按鈕邊框的大小,默認為 2 個像素 |
| 4 | bg按鈕的背景色 |
| 5 | command:按鈕關聯的函數,當按鈕被點擊時,執行該函數 |
| 6 | fg按鈕的前景色(按鈕文本的顏色) |
| 7 | font文本字體 |
| 8 | height按鈕的高度 |
| 9 | highlightcolor要高亮的顏色 |
| 10 | image按鈕上要顯示的圖片 |
| 11 | justify顯示多行文本的時候,設置不同行之間的對齊方式,可選項包括LEFT, RIGHT, CENTER |
| 12 | padx按鈕在x軸方向上的內邊距(padding),是指按鈕的內容與按鈕邊緣的距離 |
| 13 | pady按鈕在y軸方向上的內邊距(padding) |
| 14 | relief邊框樣式,設置控件3D效果,可選的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默認為 FLAT。 |
| 15 | state設置按鈕組件狀態,可選的有NORMAL、ACTIVE、 DISABLED。默認 NORMAL。 |
| 16 | underline下劃線。默認按鈕上的文本都不帶下劃線。取值就是帶下劃線的字符串索引,為 0 時,第一個字符帶下劃線,為 1 時,前兩個字符帶下劃線,以此類推 |
| 17 | width按鈕的寬度,如未設置此項,其大小以適應按鈕的內容(文本或圖片的大小) |
| 18 | wraplength限制按鈕每行顯示的字符的數量 |
| 19 | text:按鈕的文本內容 |
| 19 | anchor錨選項,控制文本的位置,默認為中心 |
| 20 | compound: |
| 21 | bitmap |
| 22 | focus_set |
| 23 | master:父窗口指針 |
| 24 | relief:設定外觀,有:flat、groove、raised、ridge、solid、sunken |
| 25 | wraplength:限制字符長度 |
| 26 | textvariable:按鈕文字可變 |
1.2 方法:以下為組件常用的方法:
| deselect() | 清除單選按鈕的狀態 |
| flash() | 在激活狀態顏色和正常顏色之間閃爍幾次單選按鈕,但保持它開始時的狀態。 |
| invoke() | 可以調用此方法來獲得與用戶單擊單選按鈕以更改其狀態時發生的操作相同的操作 |
| select() | 設置單選按鈕為選中。 |
?Button 實例:
實例2:輸入半徑,計算圓面積并輸出,代碼如下:
from tkinter import* def printInfo():#清理entry2entry2.delete(0, END)#根據輸入半徑計算面積R=int(entry1.get())S= 3.1415926*R*Rentry2.insert(10, S)#清空entry2控件entry1.delete(0, END) #初始化Tk() myWindow = Tk() #設置標題 myWindow.title('Python GUI Learning') #標簽控件布局 Label(myWindow, text="input").grid(row=0) Label(myWindow, text="output").grid(row=1) #Entry控件布局 entry1=Entry(myWindow) entry2=Entry(myWindow) entry1.grid(row=0, column=1) entry2.grid(row=1, column=1) #Quit按鈕退出;Run按鈕打印計算結果 Button(myWindow, text='Quit', command=myWindow.quit).grid(row=2, column=0,sticky=W, padx=5, pady=5) Button(myWindow, text='Run', command=printInfo).grid(row=2, column=1, sticky=W, padx=5, pady=5) #進入消息循環 myWindow.mainloop()實例2:創建按鈕,代碼如下:?
from tkinter import * from PIL import Image, ImageTkdef background(color):root.config(bg=color) def event1():label.config(text='我被改了呀', bg='yellow', font='華文行楷', relief='raised') def evnet2():button_03.config(state='disabled') def event3():"""這里添加啦鼠標形狀"""button_05.config(image=image, compound='top', cursor='heart')root = Tk() pan = Image.open('按鈕.png') image = ImageTk.PhotoImage(pan) root.title('藍霜改進GUI窗口') root.geometry('450x350+550+200') label = Label(text='這里是標簽模塊', bg='red', width=20) button_01 = Button(text='點我,改變窗口背景顏色', command=lambda: background("#778899")) button_02 = Button(text='點我,改變標簽屬性', command=event1) button_03 = Button(text='打我,求打我,打我就壞了', command=evnet2) button_04 = Button(text='點擊這里關閉窗口', bg='red', command=root.destroy) button_05 = Button(text='點擊我,在我上面添加圖片', command=event3) button_06 = Button(text='修改窗口背景', command=lambda: background('#556655')) """這里的#556655是rRGB色彩表中的16進制名稱""" label.grid(row=0, column=1) button_01.grid(row=1, column=0, padx=3, pady=10) button_02.grid(row=1, column=1, padx=3, pady=10) button_03.grid(row=1, column=2, padx=3, pady=10) button_04.place(x=340, y=320) button_05.grid(row=2, column=1) button_06.grid(row=2, column=0) root.mainloop()?
二、Checkbutton控件
Checkbutton 是復選框,又稱為多選按鈕,可以表示兩種狀態。用法為: Checkbutton
( root, option, ... ), 其中可選屬性 option 有很多,如下表所示:
| 1 | activebackground?當鼠標放上去時,按鈕的背景色 |
| 2 | activeforeground?當鼠標放上去時,按鈕的前景色 |
| 3 | bg?按鈕的背景色 |
| 4 | bitmap?位圖 |
| 5 | bd??邊框的大小,默認為 2 個像素 |
| 6 | command?關聯的函數,當按鈕被點擊時,執行該函數 |
| 7 | cursor?光標的形狀設定,如arrow, circle, cross, plus 等 |
| 8 | disabledforeground?禁用選項的前景色 |
| 9 | font?文本字體 |
| 10 | fg?選項的前景色 |
| 11 | height?復選框文本行數,默認為 1。 |
| 12 | highlightcolor?聚焦的高亮顏色 |
| 13 | image?是否使用圖標 |
| 14 | justify?顯示多行文本的時候,設置不同行之間的對齊方式,可選項包括LEFT, RIGHT, CENTER |
| 15 | offvalue?Checkbutton 的值不僅僅是 1 或 0,可以是其他類型的數值,可以通過 onvalue 和 offvalue 屬性設置 Checkbutton 的狀態值。 |
| 16 | onvalue?Checkbutton 的值不僅僅是 1 或 0,可以是其他類型的數值,可以通過 onvalue 和 offvalue 屬性設置 Checkbutton 的狀態值。 |
| 17 | padx?按鈕在x軸方向上的內邊距(padding),是指按鈕的內容與按鈕邊緣的距離,默認為 1 像素。 |
| 18 | pady?按鈕在y軸方向上的內邊距(padding),默認為 1 像素。 |
| 19 | relief?邊框樣式,設置控件3D效果,可選的有:FLAT、SUNKEN、RAISED、GROOVE、RIDGE。默認為 FLAT。 |
| 20 | selectcolor?選中后的顏色,默認為 selectcolor="red"。 |
| 21 | selectimage?選中后的圖片 |
| 22 | state?狀態,默認為 state=NORMAL |
| 23 | text?顯示的文本,使用 "\n" 來對文本進行換行。 |
| 24 | underline?下劃線。默認按鈕上的文本都不帶下劃線。取值就是帶下劃線的字符串索引,為 0 時,第一個字符帶下劃線,為 1 時,前兩個字符帶下劃線,以此類推 |
| 25 | variable?變量,variable 的值為 1 或 0,代表著選中或不選中 |
| 26 | width?默認寬度是復選框的文本或圖像決定的,你可以設置指定字符數。 |
| 27 | wraplength?是否設置包裹。 |
方法
以下為常用的方法:
| 1 | deselect()?清除復選框選中選項。 |
| 2 | flash()?在激活狀態顏色和正常顏色之間閃爍幾次單選按鈕,但保持它開始時的狀態。 |
| 3 | invoke()?可以調用此方法來獲得與用戶單擊單選按鈕以更改其狀態時發生的操作相同的操作 |
| 4 | select()?設置按鈕為選中。 |
| 5 | toggle()?選中與沒有選中的選項互相切換 |
?實例1:創建一組復選框,代碼如下:
from tkinter import* #初始化Tk() root = Tk() #設置標題 root.title('Python GUI Learning') # 用來獲取復選框是否被勾選,通過chVarDis.get()來獲取其的狀態,其狀態值為int類型 勾選為1 chVarDis = IntVar() # text為該復選框后面顯示的名稱, variable將該復選框的狀態賦值給一個變量,當state='disa check1 = Checkbutton(root, text="Disabled", variable=chVarDis, state='disabled') # 該復選框是否勾選,select為勾選, deselect為不勾選 check1.select() # sticky=tk.W 當該列中其他行或該行中的其他列的某一個功能拉長這列的寬度或高度時, # 設定該值可以保證本行保持左對齊,N:北/上對齊 S:南/下對齊 W:西/左對齊 E:東/右對齊 check1.grid(column=0, row=0, sticky=W) chvarUn = IntVar() check2 = Checkbutton(root, text="UnChecked", variable=chvarUn) check2.deselect() check2.grid(column=1, row=0, sticky=W) chvarEn = IntVar() check3 = Checkbutton(root, text="Enabled", variable=chvarEn) check3.select() check3.grid(column=2, row=0, sticky=W) #進入消息循環 root.mainloop()??實例2:綁定響應函數,代碼如下:?
from tkinter import* def callCheckbutton():#改變v的值,即改變Checkbutton的顯示值v.set('check CheckButton') #初始化Tk() root = Tk() #設置標題 root.title('Python GUI Learning') v = StringVar() v.set('check python') #綁定v到Checkbutton的屬性textvariable Checkbutton(root,textvariable = v,command = callCheckbutton).pack() #進入消息循環 root.mainloop()?
三、?Radiobutton控件
????????單選按鈕是一種可在多個預先定義的選項中選擇出一項的 Tkinter 控件 。單選按鈕可顯
示文字或圖片,顯示文字時只能使用預設字體,該控件可以綁定一個 Python 函數或方
法,當單選按鈕被選擇時,該函數或方法將被調用。
????????單選按鈕(Radio Button)這個名字來源于收音機(Radio)上的調頻按鈕, 這些按鈕用
來選擇特定波段或預設電臺,如果一個按鈕被按下, 其他同類的按鈕就會彈起,即同時
只有一個按鈕可被按下。
????????一組單選按鈕控件和同一個變量關聯。點擊其中一個單選按鈕將把這個變量設為某個預
定義的值。一般用法為: Radiobutton(myWindow,options) ,其中 option 與
Checkbutton,Button 大多重合,用法一致。
?
實例:創建單選按鈕并綁定響應函數,代碼如下:
# 創建主窗口 import tkinter as tk window = tk.Tk() window.title('選擇按鈕') window.geometry('300x300')# 定義var1將RadioButton的值與Label的值聯系在一起 var1 = tk.StringVar()# 創建標簽 l = tk.Label(window, bg='green', width=25, height=2, text='目前沒有選項') l.pack()# 在標簽上打印 def print_selection():l.config(text='你選擇了'+var1.get()) # 修改標簽中text參數# 創建選擇按鈕 r1 = tk.Radiobutton(window, text='A選擇', variable=var1, value='A', command=print_selection) r1.pack() r2 = tk.Radiobutton(window, text='B選擇', variable=var1, value='B', command=print_selection) r2.pack() r3 = tk.Radiobutton(window, text='C選擇', variable=var1, value='C', command=print_selection) r3.pack()window.mainloop()?
四、?Menu控件
Menu被用來創建一個菜單,創建Menu類的實例,然后使用add方法添加命令或者其他
菜單內容。使用方法如下:
Menu(root,option,…) 其中 option 列表如下:
?
特有函數如下:
?
實例:創建一個菜單組,代碼如下:
from tkinter import * #創建窗口 myWindow=Tk() myWindow.title("菜單") myWindow.geometry("400x300+300+100") # 創建一個菜單項,類似于導航欄,頂層菜單 menubar=Menu(myWindow) # 創建菜單項 fmenu1=Menu(myWindow) for item in ['新建','打開','保存','另存為']:# 如果該菜單是頂層菜單的一個菜單項,則它添加的是下拉菜單的菜單項。則他添加的是下拉菜單的菜單項。fmenu1.add_command(label=item)fmenu2=Menu(myWindow) for item in ['復制','粘貼','剪切']:fmenu2.add_command(label=item)fmenu3=Menu(myWindow) for item in ['大綱視圖','web視圖']:fmenu3.add_command(label=item)fmenu4=Menu(myWindow) for item in ["版權信息","其它說明"]:fmenu4.add_command(label=item)# add_cascade 的一個很重要的屬性就是 menu 屬性,它指明了要把那個菜單級聯到該菜單項上, # 當然,還必不可少的就是 label 屬性,用于指定該菜單項的名稱 menubar.add_cascade(label="文件",menu=fmenu1) menubar.add_cascade(label="編輯",menu=fmenu2) menubar.add_cascade(label="視圖",menu=fmenu3) menubar.add_cascade(label="關于",menu=fmenu4)# 最后可以用窗口的 menu 屬性指定我們使用哪一個作為它的頂層菜單 myWindow.config(menu=menubar) #進入消息循環 myWindow.mainloop()??運行結果:
?
五、?Message控件
Message 控件用來展示一些文字短消息。Message 和 Label 控件有些類似, 但在展示文
字方面比 Label 要靈活,比如 Message 控件可以改變字體,而 Label 控件只能使用一種
字體,它提供了一個換行對象,以使文字可以斷為多行。
它可以支持文字的自動換行及對齊,這里要澄清一下前面提到的 Message 控件可以改變
字體的說法: 這是說我們可以為單個控件設置任意字體, 控件內的文字都將顯示為該字
體,但我們不能給單個控件內的文字設置多種字體,如果你需要這么做,可以考慮使用
Text 控件。
創建一個 Message 控件的語法如下:
w = Message ( root, option, ... )
其中 option 列表如下:
?
請看下面實例:
from tkinter import * #初始化Tk() myWindow=Tk() #創建一個Message whatever_you_do = "Only those who have the patience to do simple things per msg = Message(myWindow, text = whatever_you_do) msg.config(bg='lightgreen', font=('times', 20, 'italic')) msg.pack( ) #進入消息循環 myWindow.mainloop()
六、畫布對象
Python Tkinter 畫布(Canvas)組件和 html5 中的畫布一樣,都是用來繪圖的。您可以將圖形,文本,小部件或框架放置在畫布上。
畫布的屬性表:
| 1 | bd?邊框寬度,單位像素,默認為 2 像素。 |
| 2 | bg?背景色 |
| 3 | confine?如果為 true (默認), 畫布不能滾動到可滑動的區域外。 |
| 4 | cursor?光標的形狀設定,如arrow, circle, cross, plus 等 |
| 5 | height?高度 |
| 6 | highlightcolor?要高亮的顏色 |
| 7 | relief?邊框樣式,可選值為 FLAT、SUNKEN、RAISED、GROOVE、RIDGE。 默認為 FLAT。 |
| 8 | scrollregion??一個元組 tuple (w, n, e, s) ,定義了畫布可滾動的最大區域,w 為左邊,n 為頭部,e 為右邊,s 為底部。 |
| 9 | width?畫布在 X 坐標軸上的大小。 |
| 10 | xscrollincrement?用于滾動請求水平滾動的數量值。 |
| 11 | xscrollcommand?水平滾動條,如果畫布是可滾動的,則該屬性是水平滾動條的 .set()方法。 |
| 12 | yscrollincrement?類似 xscrollincrement, 但是垂直方向。 |
| 13 | yscrollcommand?垂直滾動條,如果畫布是可滾動的,則該屬性是垂直滾動條的 .set()方法。 |
請看下面實例:?遞歸二叉樹的繪制
? from turtle import * # 設置色彩模式是RGB: colormode(255) lt(90) lv = 14 l = 120 s = 45 width(lv) # 初始化RGB顏色: r = 0 g = 0 b = 0 pencolor(r, g, b)penup() bk(l) pendown() fd(l)def draw_tree(l, level):global r, g, b# save the current pen widthw = width()# narrow the pen widthwidth(w * 3.0 / 4.0)# set color:r = r + 1g = g + 2b = b + 3pencolor(r % 200, g % 200, b % 200)l = 3.0 / 4.0 * llt(s)fd(l)if level < lv:draw_tree(l, level + 1)bk(l)rt(2 * s)fd(l)if level < lv:draw_tree(l, level + 1)bk(l)lt(s)width(w)speed("fastest") draw_tree(l, 4) done()?程序結果
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的Python编程:Tkinter图形界面设计(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python编程:Tkinter图形界面
- 下一篇: python图像编程:实现弹球游戏