【发布时间】:2018-06-22 15:35:17
【问题描述】:
我正在尝试创建一个带有循环的复选框列表。我已经修改了其他人的代码的实现,它使用相同的概念并且应该具有与我想要的相同的功能。当我尝试打印每个复选框的状态时,它们都没有更新为 1。即使我单击它们,它们都保持在 0。
这是我的代码,test() 函数的行为与我预期的不同。
import tkinter
import tkinter.filedialog
import os
def browse():
filez = tkinter.filedialog.askdirectory(parent=window, title='Choose a file')
ent1.insert(20, filez)
dirs = os.listdir(filez)
# remove previous IntVars
intvar_dict.clear()
# remove previous Checkboxes
for cb in checkbutton_list:
cb.destroy()
checkbutton_list.clear()
for filename in dirs:
# create IntVar for filename and keep in dictionary
var = tkinter.IntVar()
# create Checkbutton for filename and keep on list
c = tkinter.Checkbutton(window, text=filename, variable=var)
c.pack()
intvar_dict[filename] = var
checkbutton_list.append(c)
def test():
for key, value in intvar_dict.items():
if value.get() > 0:
print("HIIIIII")
print('selected:', key)
#print (value.get())
# to keep all IntVars for all filenames
intvar_dict = {}
# to keep all Checkbuttons for all filenames
checkbutton_list = []
window = tkinter.Tk()
lbl = tkinter.Label(window, text="Path")
lbl.pack()
ent1 = tkinter.Entry(window)
ent1.pack()
btn1 = tkinter.Button(window, text="Select Path", command=browse)
btn1.pack()
btn1 = tkinter.Button(window, text="Test Checkboxes", command=test)
btn1.pack()
window.mainloop()
【问题讨论】:
-
试用了您的代码。当我单击“测试复选框”时,它会为我勾选的每个复选框打印“HIIIIII”,而对于我没有勾选的复选框则不会打印。这不是你正在发生的事情吗?
-
您的代码在我这边按预期工作。我在循环中添加了一个打印语句来检查
value.get()的值,我选择的那些被更改为1。 -
如果这没有发生在你这边,我认为这不是你的代码的问题,而是一个错误。你用的是什么版本的python/OS?
-
感谢您观看这些家伙。我想我可能是一个错误,我会调查它。它仍然无法按预期工作。我在 Python 3.6
-
您是否在 QtConsole 之类的解释器中运行此代码?因为如果我直接运行您的代码,它可以工作,但不能来自 QtConsole。为了让它工作,我需要指定
IntVar(var = tkinter.IntVar(master=window))的主人。
标签: python checkbox tkinter checkboxlist