Python Tkinter-使用命令功能
我在玩tkinter,我想把它应用到一个我正在努力解决的问题上。基本代码基于位于的“简单Hello World程序”下的教程。 我正在切换到一个目录,创建该目录的列表,并根据找到的文件创建复选按钮。当我当前选中或取消选中其中一个复选按钮时,它会向控制台打印“大家好!” 假设os.listdir()返回: my_list=[file1、file2、file3、file4、file5] 最终,我希望得到一个带有文件名和checkbutton状态的字典,如下所示: 我的遗嘱{file1:1,file2:0,file3:0,file4:1,file5:1} 我还需要这个实时更新,直到程序结束 如果我单独手动创建每个复选按钮,我可以做到这一点,但是文件的数量会不时变化,我不希望每次添加或删除文件时都要回来更改脚本 如何获取每个生成的checkbutton的变量,并随时在字典中更新该值Python Tkinter-使用命令功能,python,tkinter,Python,Tkinter,我在玩tkinter,我想把它应用到一个我正在努力解决的问题上。基本代码基于位于的“简单Hello World程序”下的教程。 我正在切换到一个目录,创建该目录的列表,并根据找到的文件创建复选按钮。当我当前选中或取消选中其中一个复选按钮时,它会向控制台打印“大家好!” 假设os.listdir()返回: my_list=[file1、file2、file3、file4、file5] 最终,我希望得到一个带有文件名和checkbutton状态的字典,如下所示: 我的遗嘱{file1:1,file2
import tkinter as tk
import os
os.chdir('c:\\some\\path\\here')
my_list = os.listdir()
class Application(tk.Frame):
def __init__(self, master=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
def create_widgets(self):
for filename in my_list:
var = tk.IntVar()
self.filename = tk.Checkbutton(self, text=filename, variable=var, command=self.check_state)
self.items[filename] = var #this is where i'm getting the 'application has no member' error
self.filename.pack(side="top")
self.quit = tk.Button(self, text="Cancel",
command=self.master.destroy)
self.quit.pack(side="bottom")
def check_state(self):
my_dict = {filename:self.items[filename].get() for filename in self.items} #getting the same 'application has no member' error here as well
print(my_dict)
root = tk.Tk()
app = Application(master=root)
app.mainloop()
您可以使用一个
dict
,filename作为键,IntVar
作为值,然后在check\u state()中生成所需的dict
:
“每次添加或删除文件时。”:您没有演示如何执行此操作,而是从我的列表中创建一次按钮。要删除按钮
您需要一个引用或使其成为self.destroy()
按钮由create\u widgets函数生成。这些文件不会自动添加或删除。在大多数情况下,这些文件将保持不变。但是,它们将定期添加。这似乎正朝着我需要的方向发展。我修改了代码以反映这些更改,但出现错误“应用程序实例没有“items”成员”。我以前从未遇到过这个错误。你能详细解释一下为什么我会收到这个吗?如果没有你修改过的代码,我很难提供帮助。我更新了上面的代码,并在问题行旁边添加了注释。具体导致问题的部分是每行中的“self.items”。您没有在create_widgets()
中包含更改self.items={}
。您是正确的。我完全忽略了那条线。我感谢你的帮助。我已将此标记为答案。我可以在这里做我需要的其他事情。
def create_widgets(self):
self.items = {} # holds filename:IntVar
for filename in my_list:
var = tk.IntVar()
cb = tk.Checkbutton(self, text=filename, variable=var, command=self.check_state)
cb.pack(side="top")
self.items[filename] = var
self.quit = tk.Button(self, text="Cancel", command=self.master.destroy)
self.quit.pack(side="bottom")
def check_state(self):
print("hi there, everyone!")
my_dict = {filename:self.items[filename].get() for filename in self.items}
print(my_dict)
# or use self.my_dict if it is used by other instance functions