您的位置:

掌握tkinter radiobutton,让窗口交互更多元化

一、能够让用户进行选择的Radiobutton

Radiobutton是列表框控件的一种,可以在多个选项中进行选择,只能选择其中的一个。每个Radiobutton之间的选项互相排斥,即当选中其中的一个时,其他的都将不被选中。这在许多应用程序中异常方便。比如在性别选择、启动方式选择等场合,就能很好的使用Radio button来解决。下面是一个简单的例子:

from tkinter import *

root = Tk()

v = IntVar()

Radiobutton(root, text='Male', variable=v, value=1).pack(anchor=W)
Radiobutton(root, text='Female', variable=v, value=2).pack(anchor=W)

root.mainloop()

运行结果如下图所示:

该程序中使用了IntVar(),可以理解成VI,即为全局变量,用来实现多个RadioButton之间的封装。接着使用Radio实例化,并用其pack()方法将两个Radio button装入主窗口中,其中text为控件名称,variable为全局变量,value为将要被绑定的值(数值),多个选项的value需要不同,否则只有最后一个有效。

二、Radiobutton格式化

在界面设计的时候,我们可能需要对Radiobutton进行一定的格式化,比如需要让选项排布有序。那么该如何实现呢?使用Radiobutton的辅助类RadioButton会使我们的任务变得异常简单。下面是一个例子:

from tkinter import *
  
master = Tk()
  
v = IntVar()
  
def ShowChoice():
    print(v.get())
  
Radiobutton(master, text="One", variable=v, value=1, command=ShowChoice).grid(row=0, sticky=W)
Radiobutton(master, text="Two", variable=v, value=2, command=ShowChoice).grid(row=1, sticky=W)
Radiobutton(master, text="Three", variable=v, value=3, command=ShowChoice).grid(row=2, sticky=W)
  
mainloop()

运行结果如下:

在该程序中,我们使用了grid()布局来实现了RadioButton排布的方式。这种排版方式更加美观且易管理。同时,我们也可以在RadioButton中添加command,这样当某个RadioButton被选中时,就能自动调用该函数,实现相应的操作。

三、Radiobutton进行绑定

Radiobutton可以将值绑定到一个变量上,这样就可以在RadioButton的Value上做文章。在上面的例子中,我们使用value=1,value=2和value=3分别对三个RadioButton进行了绑定。

事实上,RadioButton并不局限于int类型,具体绑定类型取决于程序的需求,只需要将变量类型更改即可。下面是一个简单的例子:

from tkinter import *

master = Tk()

v = StringVar()

langs = [('Python', 'Python'),
         ('Perl', 'Perl'),
         ('Ruby', 'Ruby'),
         ('Lua', 'Lua')]

v.set('Python')

for lang, mode in langs:
    Radiobutton(master, text=lang, variable=v, value=mode).pack(anchor=W)


mainloop()

运行结果如下:

在该程序中,我们使用了StringVar类型的全局变量v。同时,langs是一个元组列表,其中每个元素都是由两个字符串组成,一个是选项的名称,另一个是将要绑定的变量。最后,我们使用Radiobutton生成了四个选项按钮,并分别注入到了一个个变量中。值得注意的是,变量v的默认值被设定成了'Python'。

四、Radiobutton样式的修改

在许多应用中,Radiobutton的样式是不可或缺的,因为样式能够让界面变得专业化并且简洁具有美感。下面是一个例子:

from tkinter import *
from tkinter.ttk import *

master = Tk()

v = IntVar()

style = Style()
style.configure("TRadiobutton", background="lightgreen", foreground="blue", font=("Arial", 14))

rb1 = Radiobutton(master, style="TRadiobutton", text='male', variable=v, value=1)
rb2 = Radiobutton(master, style="TRadiobutton", text='female', variable=v, value=2)

rb1.pack(anchor=W)
rb2.pack(anchor=W)

mainloop()

运行结果如下:

在上面的例子中,我们使用了ttk中的Style()函数来生成一个新样式。具体而言,我们修改了背景、前景、以及字体情况。最后,我们将两个Radiobutton放在了容器当中。

五、综合样例:

下面是一个综合的例子,该示例将Radiobutton放在了一个Frame当中:

from tkinter import *

root = Tk()

root.geometry('200x200')

frame = Frame(root)
frame.pack()

group = LabelFrame(frame, text='Group')
group.pack(side=LEFT, padx=10, pady=10)

v = StringVar()

langs = [('Python', 'Python'),
         ('Perl', 'Perl'),
         ('Ruby', 'Ruby'),
         ('Lua', 'Lua')]

v.set('Python')

for lang, mode in langs:
    Radiobutton(group, text=lang, variable=v, value=mode).pack(anchor=W)


root.mainloop()

运行结果如下:

该程序使用了Frame容器将Radiobutton信息放置到一个指定的位置。同时,我们也调整了控件之间的大小,以更好的适应程序的需求。

六、小结

Radiobutton是一个重要的窗口交互控件,可以帮助我们在窗口中完成更多元化的交互操作。相信通过本文的阐述,读者对于Radiobutton控件的使用已经有了更深层次的理解。如有疑问,欢迎留言。