【问题标题】:Tkinter-Create Buttons according to dictionary keysTkinter-根据字典键创建按钮
【发布时间】:2011-10-28 15:33:23
【问题描述】:

我正在尝试为日志文件的小型绘图程序创建一个 GUI。我有一个字典中的所有数据(实际上是一个dict{dict{dict{}}}}})并且想使用键来为顶部键复选框创建选项卡数量,基本上将被选中以绘制数量与子键的时间。我研究了 pyttk,它看起来与我想要的相似,但我遇到了如何实现选项卡/按钮创建的问题。

提前致谢。

【问题讨论】:

  • 您要问什么问题?您是要我们为您编写代码吗?你有什么问题?
  • 不,我只是想知道如何去做。我曾尝试在键上使用 for 循环来制作按钮/复选框,但这就像动态创建变量一样,我一点也不喜欢。我只是在寻找不同的想法,因为我找不到任何其他解决方案。手工制作它们就像砖墙一样灵活,这是我做不到的。

标签: python tkinter


【解决方案1】:

一种方法是将关联变量的引用存储在字典中。这是一个例子:

import Tkinter as tk

data = {"Field 1": 1,
        "Field 2": 2,
        "Field 3": 3,
        "Field 4": 4,
}

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.variables ={}
        for label in sorted(data.keys()):
            self.variables[label] = tk.IntVar()
            cb = tk.Checkbutton(self, text=label, 
                                onvalue=data[label], offvalue=0, 
                                variable=self.variables[label])
            cb.pack(side="top", fill="x")


        button = tk.Button(self, text="Submit", command=self.OnSubmit)
        button.pack()

    def OnSubmit(self):
        for field in sorted(data.keys()):
            print "Value for %s: %s" % (field, self.variables[field].get())

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()

如果您不喜欢像这样动态创建变量,只需付出一点额外的努力,您就可以创建一个所有按钮都可以关联的数组。我在问题How to run a code whenever a Tkinter widget value changes?中举了一个例子来说明如何做到这一点

【讨论】:

  • 非常感谢!非常接近我的想法,但我尝试使用列表而不是字典。我有一个简单的问题,为什么我必须将 tk.TK 传递到课程中?
  • 嗯,我的评论有点太快了。我猜这是因为我们有 def __init__(self, *args, **kwargs) 而不是 def__init(self, master)。
  • 你没有“通过” tk.Tk,那个类是 tk.Tk 的子类。
猜你喜欢
  • 1970-01-01
  • 2019-02-23
  • 2016-07-31
  • 2022-11-15
  • 1970-01-01
  • 2010-11-15
  • 2023-03-25
  • 1970-01-01
  • 2013-09-04
相关资源
最近更新 更多