Python Tkinter组件之Checkbutton

1,091 阅读5分钟

玩转Python

这是我参与8月更文挑战的第27天,活动详情查看: 8月更文挑战

复习回顾

当我们在公司使用系统时发现的bug,我们会创建一个缺陷表,缺陷表的构成如下:

以上这些组件都是Python Tkinter提供的标准组件,继承Widget父类所有属性和相关方法。

我们上一期学习了在一组数据里可以选择一个数据的单选框组件Radiobutton。

如果,我们在一组数据里我们要选择多个数据,要是使用哪个组件呢?

本期,我们将学习可以支持多选的组件-Checkbutton相关属性和方法,Let's go~

1. Checkbutton 复选框概述

Python Tkinter 提供 Checkbutton 用于跟踪用户的选择提供给应用。

Checkbutton特点

  • checkbutton可以包含文本或图像
  • 主要向用户提供多选项,用户可以选择一个或多个
  • Checkbutton每一个选项前面都有一个小正方形
  • Checkbutton选项选中后有一个小勾☑

Checkbutton语法格式

cb = Checkbutton(master,options)

2. Checkbutton 与 Radiobutton 对比

Checkbutton 与 Radiobutton 都是为用户提供选项选择的Python Tkinter标准组件

相同点:

  • Checkbutton 和 Radiobutton 都可以包含文字或者图像
  • Checkbutton 和 Radiobutton 组件都只能支持单一字体文本,文本可以跨行
  • Checkbutton 和 Radiobutton 组件都支持绑定事件command进行绑定

不同点:

  • Checkbutton 可以支持多选项选择,Radiobutton 只支持单一选项选择
  • Checkbutton 只有variable值,选中button之后variable值为Ture; Radiobutton 有value和variable属性,选中button则value值传递给variable。

3. Checkbutton 复选框常见属性

选项描述
activebackground当复选按钮位于光标下方时,它表示背景颜色
activeforeground当复选按钮位于光标下方时,它表示复选按钮的前景色
bg按钮的背景颜色
bitmap显示图像 (单色) 的按钮
bd设置边框边界的大小
command当复选按钮的状态发生更改时,它与要调用的函数相关联
cursor当鼠标指针位于复选按钮上方时,它将被更改为光标名称。
disableforeground它是用来表示禁用复选按钮的文本的颜色。
font它表示复选按钮的字体。
fg复选按钮的前景色(文本颜色)。
height它表示复选按钮的高度(行数)。默认高度为1。
highlightcolor当复选按钮处于焦点下时,焦点突出的颜色。
image用于表示复选按钮的图像。
justify如果文本包含多行,则指定文本的对齐。
offvalue如果未选中按钮,则默认将关联的控件变量设置为0。我们可以将未检查变量的状态更改为其他变量。
onvalue如果选中按钮,则默认将关联的控件变量设置为1。我们可以将已检查变量的状态更改为其他变量。
padx复选按钮的水平填充
pady复选按钮的垂直填充
relief复选按钮边框的类型。默认情况下,它被设置为FLAT
selectcolor设置复选按钮时的颜色。默认情况下,它是红色的
selectimage设置好后,图像会显示在checkbutton上
state它表示复选按钮的状态。默认情况下,它被设置为normal。我们可以将其更改为禁用,使checkbutton没有响应。当复选按钮处于焦点下时,它的状态是活动的
underline它表示要加下划线的文本中字符的索引。索引从文本中的零开始
variable它表示跟踪checkbutton状态的关联变量
width它表示复选按钮的宽度。它以文本形式表示的字符数来表示
wraplength如果将此选项设置为整数,则文本将被分割为若干块

4. Checkbutton 复选框常见方法

方法作用
deselect()取消多选框的选择状态
flash()复选按钮在活动颜色和正常颜色之间闪烁
invoke () 此方法将checkbutton进行相关联
select ()它被调用来打开checkbutton
toggle()它用于在不同的复选按钮之间切换

5. 小试牛刀

Checkbutton 组件进行练习实现效果如下:

  1. 首先创建“兴趣爱好调查问卷”label标签,位置位于表单顶部

    Label(self, text="兴趣爱好调查问卷").pack(side="top")
    
  2. 创建Checkbutton复选框按键

    self.c1 = Checkbutton(self,text = "读书")
    
    self.c2 = Checkbutton(self,text = "跑步")
    
  3. Checkbutton选项选中的值我们要获取需要使用IntVar或者StringVar

    • Checkbutton只有variable这个属性
    • 默认情况下,variable 选项设置为 1 表示选中状态,反之设置为 0
    • 使用TKinter的IntVar或者StringVar与Checkbutton进行状态绑定,获取onvalue或者offvalue的值
    self.reading = IntVar()
    self.running = IntVar()
    
    print(self.reading.get())
    self.c1 = Checkbutton(self,text = "读书",variable = self.reading,onvalue = 1,offvalue =0)
    
    self.c2 = Checkbutton(self,text = "跑步",variable = self.running,onvalue = 1,offvalue =0)
    
    self.c1.pack(side = "left");self.c2.pack(side= "left")
    
  4. 最后创建确定按键来提交数据

    Button(self,text ="确定",command  =self.confirm).pack(side = "left")
    
  5. 使用GUI面向对象编程写法,使用Application(Frame)来创建实例对象,创建组件的方法封装给createWidgetCheckbutton()方法,通过构造函数创建好组件

  6. 完整代码如下:

    from tkinter import *
    
    
    class Application(Frame):
    
        def __init__(self,master=None):
            # super()代表的是父类的定义,而不是父类对象
            super().__init__(master)
            self.master = master
            self.pack()
    
            self.crateWidgetCheckbutton()
    
        def crateWidgetCheckbutton(self):
    
            Label(self, text="兴趣爱好调查问卷").pack(side="top")
    
            self.reading = IntVar()
            self.running = IntVar()
    
            print(self.reading.get())
            self.c1 = Checkbutton(self,text = "读书",variable = self.reading,onvalue = 1,offvalue =0)
    
            self.c2 = Checkbutton(self,text = "跑步",variable = self.running,onvalue = 1,offvalue =0)
    
            self.c1.pack(side = "left");self.c2.pack(side= "left")
    
            Button(self,text ="确定",command  =self.confirm).pack(side = "left")
    
        def confirm(self):
    
            # messagebox.showinfo("提示","选择的性别:"+self.v.get())
    
            if self.reading.get() == 1:
                messagebox.showinfo("提示","腹有诗书气自华")
            if self.running.get() == 1:
                messagebox.showinfo("提示","运动使人年轻")
    
    root = Tk()
    root.geometry("300x130+200+300")
    root.title("MyfirstAPP")
    app = Application(master=root)
    
    root.mainloop()
    

总结

本期,我们学习 Python Tkinter 提供给用户进行选项的组件

  • Radiobutton单选框,当需要在一组数据中只选择单个数据时,可以使用此组件
  • Checkbutton复选框,当需要支持多选项选择,可以使用此组件。

以上是本期内容,欢迎大佬们点赞评论指正,下次见~ღ( ´・ᴗ・` )比心🌹🌹