【问题标题】:Tkinter StringVar() shows blankTkinter StringVar() 显示空白
【发布时间】:2020-04-18 06:31:45
【问题描述】:

我正在使用 StringVar 来更新 GUI 上的标签。

我正在使用 set 方法更新值,但在应用程序运行时文本从未显示。

我可以使用 get 方法(最终的打印语句,如下所示)并看到已传递给它的值,但它仍然没有显示在我的窗口上。我正在使用带有 Spyder 的 mac。

class Application(tk.Frame):
    def __init__(self, bud, master=None):
        super().__init__(master)
        self.bud = bud
        self.master = master
        self.pack()
        self.bud.update_all()
        self.r = 1
        self.create_widgets()

    def create_widgets()
        trans = [tk.StringVar() for c in self.bud.categories]

        for i, c in enumerate(self.bud.categories):
            tk.Label(self, text = c.name, anchor = "w").grid(row = self.r, column = 0)
            tk.Label(self, textvariable = trans[i],fg = "black").grid(row = self.r, column = 1)
            trans[i].set("Hello")
            self.r +=1
        print(trans[i].get())

此部分在主脚本中的类之外运行

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

【问题讨论】:

标签: python macos tkinter label


【解决方案1】:

问题是你使用循环变量作为改变循环每次迭代的小部件选项的值。我认为以下将通过使用帮助函数来避免该问题 - 但无法验证这一点,因为您没有在问题中提供 minimal reproducible example

请注意,您还遗漏了 create_widgets() 方法中的 self 参数。

    def create_widgets(self):

        # Local helper function.
        def create_labels(name, var, row):
            tk.Label(self, text=name, anchor="w").grid(row=row, column=0)
            tk.Label(self, textvariable=var, fg="black").grid(row=row, column=1)

        trans = [tk.StringVar() for _ in self.bud.categories]

        for i, c in enumerate(self.bud.categories):
            create_labels(c.name, trans[i], self.r)
            trans[i].set("Hello")
            self.r +=1
            print(trans[i].get())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 2020-12-15
    • 1970-01-01
    相关资源
    最近更新 更多