如何获取Tkinter复选框的状态?按状态我的意思是得到它是否有复选标记。
答案 0 :(得分:38)
当您创建它时,它需要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
答案 1 :(得分:16)
如果您使用tkinter中的新 * ttk模块,则可以在不指定变量的情况下读取和写入检查按钮状态。
exomizer sfx 2061 music.c64 sidfile2000.prg -o final.prg
请注意,新复选框默认为“alternate”,有时称为“half-checked”状态:
您可以使用.state()方法读取当前状态:
import tkinter
from tkinter import ttk
tkwindow = tkinter.Tk()
chk = ttk.Checkbutton(tkwindow, text="foo")
chk.grid(column=0, row=0)
在代码中设置状态:
>>> print(chk.state()) # half-checked
('alternate',)
>>> print(chk.state()) # checked
('selected',)
>>> print(chk.state()) # not checked
()
这是检查特定状态的便捷方法:
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!
我发现了两件棘手的事情:
初始状态为“alternate”,并且在添加“selected”状态标志时不会清除此状态标志。所以,如果你想在代码中切换你的检查按钮,你首先需要清除“alternate”标志:
chk.instate(['selected']) # returns True if the box is checked
如果使用
禁用/启用检查按钮chk.state(['!alternate'])
然后一切正常。但是,如果您使用这些常见的替代方法:
chk.state(['disabled'])
chk.state(['!disabled'])
然后重新确认'alternate'标志。
如果为变量按钮分配变量,则不会发生此行为,但是,如果要分配变量,则此答案可能对您没有帮助:)
* ttk在Python 2.7(Tk 8.5)中可用。这篇question讨论了旧标准小部件与较新的“主题”小部件之间的差异。
答案 2 :(得分:-2)
bitsmack 的回答与我所看到的并不完全一致。
chk.state() 返回一个元组,它在被选中时有两个元素:('focus','selected')
import tkinter as tk
from tkinter import ttk
def p(event):
st = ck.state()
print (f'is tuple {type(st) is tuple} {len(st)}-----------------------------------------')
if 'selected' in st:
print ('got selected')
for i,pst in enumerate(st) :
print(f'{i}, {pst}')
root = tk.Tk()
root.geometry('200x200+300+200')
root.grid_rowconfigure(0, weight = 1)
ck = ttk.Checkbutton(root,text = 'tryme')
ck.grid()
root.bind('<Return>',p)
root.mainloop()
产生这个结果:
是元组 True 1----------------------------------------
0,备用 是元组 True 2----------------------------------------
被选中 0、专注 1、选中 是元组 True 1-----------------------------------------
0,焦点
所以,判断复选框是否被选中:
if 'selected' in chk.state()
替代:
if 'alternate' in chk.state()
未选中:
if not ('selected' in chk.state or 'alternate' in chk.state)