Python之tkinter 選項按鈕與複選框的基本應用

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()

運行結果:
在這裏插入圖片描述

variablevalue綁定,通過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()

運行結果:
在這裏插入圖片描述

謝謝觀看,筆者會持續更新,如有錯誤或者建議,請私信我

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