Radiobutton 選項按鈕
選項按鈕的基本概念
選項按鈕
Radiobutton 名稱的由來是無線電的按鈕,在收音機時代可以用無線電的按鈕選擇特定頻道。選項按鈕最大的特色是可以用鼠標單擊方式選取此選項,同時一次只能有一個選項被選取。最常見的方式是讓選項按鈕以文字方式存在,與標籤一樣,我們也可以設計含圖像的選項按鈕
程序設計時可以設計讓選項按鈕與函數
(或稱方法)綁在一起,當選擇適當的選項按鈕時,可以自動執行相關的函數或方法
語法格式:
Radiobutton(父對象, options, ...)
參數:
- 第一個參數:
父對象
,表示這個選項按鈕將建立在哪一個窗口內 - 第二個參數:
options
,參數如下
參數 | 含義 |
---|---|
activebackground | 鼠標光標在選項按鈕上時的背景顏色 |
activeforeground | 鼠標光標在選項按鈕上時的前景顏色 |
anchor | 如果空間大於所需時,控制選項按鈕的位置 默認值是CENTER |
bitmap | 位圖圖像對象 |
borderwidth | 邊界寬度 默認是兩個像素 |
bd | 邊界寬度 默認是兩個像素 |
bg | 標籤背景或indicator的背景顏色 |
command | 單機功能按鈕時,執行此方法 |
cursor | 當鼠標光標移至按鈕上時的形狀 |
fg | 文字前景色彩 |
font | 字形 |
height | 高,單位是字符高 |
highlightbackground | 當選項按鈕獲取焦點時的背景顏色 |
highlightcolor | 當選項按鈕取得焦點時的顏色 |
image | 圖像對象,如果要建立含圖像的選項按鈕時,可以使用此參數 |
indicatoron | 當此值爲0時,可以建立盒子選項按鈕 |
justify | 當有多行文字時,最後一行文字的對齊方式 |
padx | 可設置選項按鈕與文字的間隔 默認是1 |
pady | 可設置選項按鈕的上下間距 默認是1 |
selectcolor | 當選項按鈕被選取時的顏色 |
selectimage | 如果設置圖像選項按鈕時,可由此設置當選項按鈕被選取時的不同圖像 |
state | 若設置爲DISABLED,則以灰階顯示選項按鈕,表示暫時無法使用 默認是state=NORMAL |
text | 選項按鈕名稱 |
textvariable | 以變量方式顯示選項按鈕文字 |
underline | 可以設置第幾個文字有下劃線 從0開始計算,默認是-1,表示無下劃線 |
value | 選項按鈕的值,可以區分所選取的選項按鈕 |
variable | 設置或取得目前選取的單選按鈕,它的值類型通常是IntVar或StringVar |
width | 選項按鈕的文字有幾個字符框,省略時會自動調整爲實際寬度 |
wraplength | 限制每行的文字數 默認是0,表示只有 "\n" 纔會換行 |
選項按鈕的初步運用
例子
:運用IntVar
import tkinter
def show():
# 獲取var的值
num = var.get()
# 如果值爲1,更改text值爲"我是男生"
if num == 1:
label.config(text="我是男生")
# 如果值爲2,更改text值爲"我是女生"
else:
label.config(text="我是女生")
# 創建主窗口
root = tkinter.Tk()
# 整型對象
var = tkinter.IntVar()
# 設置默認選項爲1, 在次相當於默認是男生
var.set(1)
label = tkinter.Label(root, text="這是預選,還未選擇", bg="lightyellow", width=30)
label.pack()
# 創建男生選項按鈕,值爲1,點擊此按鈕自動調用show函數
man = tkinter.Radiobutton(root, text="男生", variable=var, value=1, command=show)
man.pack()
# 創建女生選項按鈕,值爲2
woman = tkinter.Radiobutton(root, text="女生", variable=var, value=2, command=show)
woman.pack()
root.mainloop()
運行結果:
variable
與value
綁定,通過get方法
將所選選項的參數value
的值傳回,因爲我們最開始設置默認是1,但是我們沒有點擊它,就沒有觸發show函數,故沒有在開始就變爲"我是男生"
例子
:更改方式,不用IntVar
,用StringVar
import tkinter
def show():
# 獲取var的值
label.config(text="我是"+var.get())
# 創建主窗口
root = tkinter.Tk()
# 整型對象
var = tkinter.StringVar()
# 設置默認選項爲1, 在次相當於默認是男生
var.set("男生")
label = tkinter.Label(root, text="這是預選,還未選擇", bg="lightyellow", width=30)
label.pack()
# 創建男生選項按鈕,值爲1,點擊此按鈕自動調用show函數
man = tkinter.Radiobutton(root, text="男生", variable=var, value="男生", command=show)
man.pack()
# 創建女生選項按鈕,值爲2
woman = tkinter.Radiobutton(root, text="女生", variable=var, value="女生", command=show)
woman.pack()
root.mainloop()
運行結果:
跟第一種方式一樣
將字典應用在選項按鈕上
選項少好說,要是選項多了呢?這時候字典就很方便了
例子
:
import tkinter
def show():
# 獲取var的值
label.config(text="我是"+dict[var.get()])
# 創建主窗口
root = tkinter.Tk()
var = tkinter.IntVar()
var.set(0)
dict = {0: "一年級", 1: "二年級", 2: "三年級", 3: "四年級", 4: "五年級", 5: "六年級"}
label = tkinter.Label(root, text="這是預選,還未選擇", bg="lightyellow", width=30)
label.pack()
for x, y in dict.items():
tkinter.Radiobutton(root, text=y, variable=var, value=x, command=show).pack()
root.mainloop()
運行結果:
盒子選項按鈕
意思就是把小圓框變成盒子樣式的選項按鈕
在Radiobutton方法內使用indicatoron
參數,將他設爲0
,就可以把它變成盒子按鈕
例子
:
import tkinter
def show():
# 獲取var的值
label.config(text="我是"+dict[var.get()])
# 創建主窗口
root = tkinter.Tk()
var = tkinter.IntVar()
var.set(0)
dict = {0: "一年級", 1: "二年級", 2: "三年級", 3: "四年級", 4: "五年級", 5: "六年級"}
label = tkinter.Label(root, text="這是預選,還未選擇", bg="lightyellow", width=30)
label.pack()
for x, y in dict.items():
tkinter.Radiobutton(root, text=y, variable=var, indicatoron=0, value=x, width=30, command=show).pack()
root.mainloop()
運行結果:
建立含圖像的選項按鈕
也可以將選項文字用圖像代替,用法跟標籤Label相同
例子
:
import tkinter
def show():
# 獲取var的值
label.config(text="選擇的是"+var.get())
# 創建主窗口
root = tkinter.Tk()
# 加載帽子圖像
imgHat = tkinter.PhotoImage(file="1.png")
# 加載襪子圖像
imgSocks = tkinter.PhotoImage(file="2.png")
# 加載紙尿褲圖像
imgDiapers = tkinter.PhotoImage(file="3.png")
var = tkinter.StringVar()
var.set("帽子")
label = tkinter.Label(root, text="這是預選,還未選擇", bg="lightyellow", width=30)
label.pack()
Hat = tkinter.Radiobutton(root, image=imgHat, variable=var, value="帽子", command=show)
Hat.pack()
Socks = tkinter.Radiobutton(root, image=imgSocks, variable=var, value="襪子", command=show)
Socks.pack()
Diapers = tkinter.Radiobutton(root, image=imgDiapers, variable=var, value="紙尿褲", command=show)
Diapers.pack()
root.mainloop()
運行結果:
另外,可以加上文字,增加text參數設置文字,增加compound參數設置圖像與文字的位置
例子
:
Hat = tkinter.Radiobutton(root, text="帽子", image=imgHat, compound=tkinter.RIGHT, variable=var, value="帽子", command=show)
Hat.pack()
Socks = tkinter.Radiobutton(root, text="襪子", image=imgSocks, compound=tkinter.RIGHT, variable=var, value="襪子", command=show)
Socks.pack()
Diapers = tkinter.Radiobutton(root, text="紙尿褲", image=imgDiapers, compound=tkinter.RIGHT, variable=var, value="紙尿褲", command=show)
Diapers.pack()
運行結果:
Checkbutton 複選框
Checkboxs 可以翻譯爲複選框
,它在控件中的類別名稱是Checkbutton
複選框在屏幕上顯示爲一個方框,它與選項按鈕最大的差別在於它是複選。在設計複選框時,最常見的方式是讓複選框以文字形式存在,與標籤一樣,也可以設計含有圖像的複選框
程序設計時,可以設計讓每個複選框與函數(或稱方法)綁在一起,當此選項被選擇時,可以自動執行相關的函數或方法
可以使用Cheakbutton()方法建立複選框,語法格式如下:
Cheakbutton(父對象, options, ...)
參數:
- 第一個參數:
父對象
,表示這個複選框按鈕將建立在哪一個窗口內 - 第二個參數:
options
,參數如下
參數 | 含義 |
---|---|
activebackground | 鼠標光標在複選框按鈕上時的背景顏色 |
activeforeground | 鼠標光標在複選框按鈕上時的前景顏色 |
bitmap | 位圖圖像對象 |
borderwidth | 邊界寬度 默認是兩個像素 |
bd | 邊界寬度 默認是兩個像素 |
bg | 標籤背景或indicator的背景顏色 |
command | 當用戶更改選項時,會自動執行此方法 |
cursor | 當鼠標光標移至複選框上時的形狀 |
disabledforeground | 當無法操作時的顏色 |
font | 字形 |
height | 複選框中的文字有幾行 默認是一行 |
highlightbackground | 當複選框按鈕獲取焦點時的背景顏色 |
highlightcolor | 當複選框按鈕取得焦點時的顏色 |
image | 圖像對象,如果要建立含圖像的選項按鈕時,可以使用此參數 |
justify | 當有多行文字時,最後一行文字的對齊方式 |
offvalue | 這是控制變量默認,若複選框未選取值是0,可以由此更改設置此值 |
onvalue | 這是控制變量默認,若複選框未選取值是1,可以由此更改設置此值 |
padx | 可設置複選框按鈕與文字的間隔 默認是1 |
pady | 可設置複選框按鈕的上下間距 默認是1 |
relief | 可由此控制複選框外框 默認是relief=FLAT |
selectcolor | 當複選框按鈕被選取時的顏色 |
selectimage | 如果設置圖像複選框按鈕時,可由此設置當複選框按鈕被選取時的不同圖像 |
state | 若設置爲DISABLED,則以灰階顯示覆選框按鈕,表示暫時無法使用 默認是state=NORMAL 如果鼠標光標在複選框上方表示ACTIVE |
text | 複選框旁的文字 |
underline | 可以設置第幾個文字有下劃線 從0開始計算,默認是-1,表示無下劃線 |
variable | 設置或取得目前選取的複選框,它的值類型通常是IntVar或StringVar |
width | 複選框按鈕的文字有幾個字符框,省略時會自動調整爲實際寬度 |
wraplength | 限制每行的文字數 默認是0,表示只有 "\n" 纔會換行 |
複選框的初步運用
例子
:
import tkinter
# 創建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="請選擇最喜歡的食物", bg="lightyellow", fg="red", width=30)
label.grid(row=0)
varOne = tkinter.IntVar()
cbutOne = tkinter.Checkbutton(root, text="餃子", variable=varOne)
cbutOne.grid(row=1, sticky=tkinter.W)
varTwo = tkinter.IntVar()
cbutTwo = tkinter.Checkbutton(root, text="春捲", variable=varTwo)
cbutTwo.grid(row=2, sticky=tkinter.W)
varThree = tkinter.IntVar()
cbutThree = tkinter.Checkbutton(root, text="湯圓", variable=varThree)
cbutThree.grid(row=3, sticky=tkinter.W)
root.mainloop()
運行結果:
例子
:運用字典的形式
import tkinter
def send():
x = ""
for j in cheakboxs:
# 這裏實際上是cheakboxs[j].get() == True
# 如果被勾選的話傳回來的值爲True
# 如果沒有被勾選的話傳回來的值爲False
if cheakboxs[j].get():
x = x +foods[j] + "\n"
print(x)
# 創建主窗口
root = tkinter.Tk()
label = tkinter.Label(root, text="請選擇最喜歡的食物", bg="lightyellow", fg="red", width=30)
label.grid(row=0)
foods = {0: "餃子", 1: "春捲", 2: "湯圓", 3: "混沌", 4: "熱乾麪"}
# 這裏負責給予字典的鍵一個False或者True的值,用於檢測是否被勾選
cheakboxs = {}
for i in range(len(foods)):
# 這裏相當於是{0: False, 1: False, 2: False, 3: False, 4: False}
cheakboxs[i] = tkinter.BooleanVar()
# 只有被勾選才變爲True
tkinter.Checkbutton(root, text=foods[i], variable=cheakboxs[i]).grid(row=i + 1, sticky=tkinter.W)
buttonOne = tkinter.Button(root, text="提交", width=10, command=send)
buttonOne.grid(row=len(foods) + 1)
root.mainloop()
運行結果:
簡單編輯程序的應用
混用文本框,功能按鈕,複選框
例子
:
import tkinter
def selectAll():
# select_range 選擇的範圍
entry.select_range(0, "end")
def selectDel():
# 清空選擇的文字
entry.select_clear()
def clear():
# 刪除所有
entry.delete(0, "end")
def readOnly():
if var.get():
# 以灰階顯示覆選框,表示暫時無法使用
entry.config(state=tkinter.DISABLED)
else:
entry.config(state=tkinter.NORMAL)
# 創建主窗口
root = tkinter.Tk()
# row=0 建立Entry文本框
entry = tkinter.Entry(root, width=30)
entry.grid(row=0, column=0, columnspan=4, padx=5, pady=5, sticky=tkinter.W)
# row=1 建立按鈕
butOne = tkinter.Button(root, text="全選", command=selectAll)
butOne.grid(row=1, column=0, padx=5, pady=5, sticky=tkinter.W)
butTwo = tkinter.Button(root, text="取消全選", command=selectDel)
butTwo.grid(row=1, column=1, padx=5, pady=5, sticky=tkinter.W)
butThree = tkinter.Button(root, text="刪除", command=clear)
butThree.grid(row=1, column=2, padx=5, pady=5, sticky=tkinter.W)
butFour = tkinter.Button(root, text="退出", command=root.destroy)
butFour.grid(row=1, column=3, padx=5, pady=5, sticky=tkinter.W)
# row=2 複選框
var = tkinter.BooleanVar()
var.set(False)
cheakReadOnly = tkinter.Checkbutton(root, text="只讀", variable=var, command=readOnly)
cheakReadOnly.grid(row=2, column=0)
root.mainloop()
運行結果:
謝謝觀看,筆者會持續更新,如有錯誤或者建議,請私信我