sunrise085 发表于 2020-7-25 17:50:58

tkinter 如何获取Checkbutton复选框的状态

下面是我写的程序片段,已经把其他的删除了。
我听过for循环创建了几个复选框,并用bind绑定了同一个操作函数,我想在该函数中获取对应复选框的状态,但是一直没有搞定
event.widget['variable']的类型已经和varlist的类型不一样了。前者是<class '_tkinter.Tcl_Obj'>,后者是<class 'tkinter.IntVar'>,所以不能用get()函数获取其值了

from tkinter import *

def cbtcallback(event):#Checkbutton的调用函数
    print(event.widget['text'])
    print(event.widget['variable'])
   
    #这里应该怎么获取对应多选框的状态variable的值,下面的方式是不行的。
    #if event.widget['variable'].get()==1:
   #   print('选中了该选项:',event.widget['text'])

root = Tk()
frame1=Frame(root)
frame2=Frame(root)
varlist=
strlist=["我很英俊","我很富有", "我很有才"]
Checkbuttondict={}
#for循环生成三个复选框
for i in range(3):
    CkBt=Checkbutton(frame1, text=strlist, variable=varlist)
    CkBt.bind("<Button-1>", cbtcallback)
    CkBt.pack()
    Checkbuttondict.setdefault(CkBt,varlist)

frame1.pack(padx=10,pady=10)
frame2.pack(padx=10,pady=10)
mainloop()

zltzlt 发表于 2020-7-25 17:58:12

这样好像可以:

from tkinter import *


def cbtcallback(event):# Checkbutton的调用函数
    print(event.widget['text'])
    if Checkbuttondict.get() == 0:
      print('选中了该选项:', event.widget['text'])


root = Tk()
frame1 = Frame(root)
frame2 = Frame(root)
varlist =
strlist = ["我很英俊", "我很富有", "我很有才"]
Checkbuttondict = {}
# for循环生成三个复选框
for i in range(3):
    CkBt = Checkbutton(frame1, text=strlist, variable=varlist)
    CkBt.bind("<Button-1>", cbtcallback)
    CkBt.pack()
    Checkbuttondict.setdefault(CkBt, varlist)

frame1.pack(padx=10, pady=10)
frame2.pack(padx=10, pady=10)
mainloop()

sunrise085 发表于 2020-7-25 18:18:39

zltzlt 发表于 2020-7-25 17:58
这样好像可以:

666啊
我一直在尝试那个控件属性,忘记去尝试那个字典了。。感谢
页: [1]
查看完整版本: tkinter 如何获取Checkbutton复选框的状态