我编写了一个应用程序,该应用程序从用户那里获取一些数据,查询网站的API,然后返回并处理该API提供的数据。我试图通过为检索到的每个项目创建复选框来允许用户更好地控制下一步操作。

由于每次使用时检索到的项目数量会有所不同,因此,我将复选框和IntVars(是否已选中)放入列表中。但是,当我尝试将IntVars设置为1(所以它们都开始检查)时,我收到TypeError告诉我它希望将IntVar实例作为第一个arg,但这对我来说没有任何意义。首先调用IntVar的方法。

这是我的代码的简化版本,会产生相同的错误:

import Tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None):
        tk.Frame.__init__(self, master)
        self.grid()

        self.test_names = ["Box 1", "Box 2", "Box 3", "Box 4"]
        self.boxes = []
        self.box_vars = []
        self.box_num = 0

        btn_test1 = tk.Button(self, text="Test 1", width = 11, command = self.test1)
        btn_test1.grid()

    def test1(self):
        for name in self.test_names:
            self.box_vars.append(tk.IntVar)
            self.boxes.append(tk.Checkbutton(self, text = name, variable = self.box_vars[self.box_num]))
            self.box_vars[self.box_num].set(1)
            self.boxes[self.box_num].grid(sticky = tk.W)
            self.box_num += 1

root = tk.Tk()
app = Application(master=root)
app.mainloop()


以及按下按钮时的错误消息:

TypeError: unbound method set() must be called with IntVar instance as first
argument (got int instance instead)


我究竟做错了什么?

最佳答案

经典问题。您添加类型IntVar而不是添加类型IntVar的对象。添加这样的括号:

self.box_vars.append(tk.IntVar())

关于python - Python-Tkinter-在列表中设置IntVar,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30059409/

10-10 17:45