获取Tkinter复选框状态

rec*_*gle 36 python tkinter

如何获取Tkinter复选框的状态?按状态我的意思是得到它是否有复选标记.

aar*_*ing 41

在创建它时,它需要一个variable关键字参数.它传递的IntVar距离Tkinter.选中或取消选中该框会将包含的值设置var为相应的布尔状态.这可以访问var.get():

checked => var.get()

没检查=> not var.get()

>>> root = Tkinter.Tk()
>>> var = Tkinter.IntVar()
>>> chk = Tkinter.Checkbutton(root, text='foo', variable=var)
>>> chk.pack(side=Tkinter.LEFT)
>>> var.get()  #unchecked
0
>>> var.get()  #checked
1
Run Code Online (Sandbox Code Playgroud)

  • 没有变量就不可能?=( (4认同)
  • 如果您可以通过小部件获取值对您很重要,您可以随时将变量附加到小部件(类似于chk.val = var),然后使用chk.val.get()访问它 (4认同)
  • 使用变量实际上非常强大。您不仅可以使用变量来检查复选框的状态,还可以使用变量来设置复选框的值。因此, var.set(1) 将确保显示复选标记,而 var.set(0) 将确保清除复选标记。此外,您可以为变量设置跟踪功能,以便如果有人单击复选框,可以触发该功能。这都是事件驱动范式的一部分。很强大的东西。 (2认同)

bit*_*ack 17

如果使用tkinter中的新* ttk模块,则可以在不分配变量的情况下读取和写入检查按钮状态.

import tkinter
from tkinter import ttk
tkwindow = tkinter.Tk()
chk = ttk.Checkbutton(tkwindow, text="foo")
chk.grid(column=0, row=0)
Run Code Online (Sandbox Code Playgroud)

请注意,新复选框默认为"alternate",有时称为"half-checked"状态:

备用

您可以使用.state()方法读取当前状态:

>>> print(chk.state())  # half-checked
('alternate',)
>>> print(chk.state())  # checked
('selected',)
>>> print(chk.state())  # not checked
()
Run Code Online (Sandbox Code Playgroud)

要在代码中设置状态:

chk.state(['selected'])  # check the checkbox
chk.state(['!selected']) # clear the checkbox
chk.state(['disabled'])  # disable the checkbox
chk.state(['!disabled','selected']) # enable the checkbox and put a check in it!
Run Code Online (Sandbox Code Playgroud)

这是检查特定状态的便捷方法:

chk.instate(['selected'])  # returns True if the box is checked
Run Code Online (Sandbox Code Playgroud)

我找到了两件棘手的事情:

  1. 初始状态为"alternate",并且在添加"selected"状态标志时不会清除此状态标志.因此,如果要在代码中切换检查按钮,首先需要清除"alternate"标志:

    chk.state(['!alternate'])
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果您使用禁用/启用检查按钮

    chk.state(['disabled'])
    chk.state(['!disabled'])
    
    Run Code Online (Sandbox Code Playgroud)

    一切正常.但是,如果您使用这些常见的替代方法:

    chk.config(state=tk.DISABLED)
    chk.config(state=tk.NORMAL)
    
    Run Code Online (Sandbox Code Playgroud)

    然后重新确认'备用'标志.

    如果为变量按钮分配变量,则不会发生此行为,但是,如果要分配变量,则此答案可能无法帮助您:)


*ttk在Python 2.7(Tk 8.5)中可用.这个问题讨论了旧标准小部件与较新的"主题"小部件之间的差异.

  • @AbdullahSaid 嗯,它仍然对我有用。也许您正在使用旧式 tkinter Checkbutton 而不是“ttk.Checkbutton”? (3认同)
  • AttributeError:“Checkbutton”对象没有属性“instate”:( (2认同)