tkinter从动态复选框中获取值

时间:2014-07-09 20:57:11

标签: python checkbox tkinter

我正在尝试从XML文件中的数据创建许多动态复选框。

我自己创建按钮没有问题,但是我无法获得它们生成的值。

这是我到目前为止所得到的......

#!/usr/bin/python3
from tkinter import *
from tkinter import ttk
import xml.etree.ElementTree as ET

root = Tk()

def Readstatus():
    print(var.get())

listTree = ET.parse('list.xml')
listRoot = listTree.getroot()

var = dict()
count=1
for child in listRoot:
    var[child]=IntVar()
    chk = Checkbutton(root, text='Text'+str(count), variable=var[child], command=Readstatus)
    count += 1
    chk.pack()

root.mainloop()

任何帮助都会有很大帮助!

吉勒

1 个答案:

答案 0 :(得分:3)

事件处理程序将返回一个TypeError,因为它需要1个参数并且什么都没有。为了使这更简单,我修改了代码,使其成为事件处理程序的关键。

from tkinter import *
from tkinter import ttk
import xml.etree.ElementTree as ET

root = Tk()

def Readstatus(key):
    print(var.get(key))

listTree = ET.parse('test.xml')
listRoot = listTree.getroot()

var = dict()
count=1
for child in listRoot:
    var[child]=IntVar()
    chk = Checkbutton(root, text='Text'+str(count), variable=var[child], 
                      command=lambda key=child: Readstatus(key))
    count += 1
    chk.pack()

root.mainloop()

这对我有用。我确实认为使用Element对象作为字典中的键有点难以调试,但我确信你有充分的理由这样做。

修改

要返回1或0,请将事件处理程序更改为:

def Readstatus(key):
    var_obj = var.get(key)
    print(var_obj.get())

var.get()命令实际上是调用字典对象的 get()方法,这就是它需要传递给它的键的原因。返回IntVar对象后,可以调用自己的 get 方法返回0或1.另请参阅: