如何将命令添加到使用字典键多次填充的Tkinter Checkbutton小部件

2024-04-23 14:11:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我用字典中的键填充了一个Tkinter框架,其中有许多checkbutton(大约100个),所以我使用了for循环来完成这项工作。为了保存状态(0或1),我有另一个字典来处理这个问题。但是,当我试图分配一个命令,在选中(即点击)时,将打印状态,什么也没有发生。下面是我创建checkbutton的代码:

import Tkinter as tk

items = {'Books': 5, 'Games': 20, 'Food': 10, 'Clothes': 2}
items_check = {}

class Application(tk.Frame):
    def __init__(self, master):
        self.master = master
        tk.Frame.__init__(self, master, width=500, height=500)
        self.master.title('Application')
        self.pack_propagate(0)
        self.pack()

        global items
        global items_check
        self.row_var = 0
        self.column_var = 0
        self.row_count = 0
        for key in items.iterkeys():
            items_check[key] = tk.IntVar()
            item_button = tk.Checkbutton(self, text=key, variable=items_check[key], command=self.check_item(key))
            if self.row_count % 15 == 0:
                self.row_count = 0
                self.row_var = 0
                self.column_var += 1
            item_button.grid(row=self.row_var, column=self.column_var, sticky=tk.W)
            self.row_var += 1
            self.row_count += 1

    def check_item(self, key):
        global items_check
        if items_check[key].get() == 1:
            items_check[key].set(0)
            print key
            print items_check[key].get()
        elif items_check[key].get() == 0:
            items_check[key].set(1)
            print key
            print items_check[key].get()

app = Application(tk.Tk())
app.run()

本质上,当我点击任何一个checkbutton时,我想将这个特定checkbutton的键和值打印到控制台。这个代码什么都不会发生。有什么想法吗?谢谢!在


Tags: keyselfmastergetapplicationvarcheckcount