我正在尝试从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()
任何帮助都会有很大帮助!
吉勒
答案 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.另请参阅: