gpt4 book ai didi

python - Tkinter StringVar() 显示空白

转载 作者:太空宇宙 更新时间:2023-11-03 19:56:18 24 4
gpt4 key购买 nike

我正在使用 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()

最佳答案

问题是您使用循环变量作为小部件选项的值,这些选项会更改循环的每次迭代。我认为以下内容可以通过使用辅助函数来避免该问题 - 但无法验证这一点,因为您没有提供 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())

关于python - Tkinter StringVar() 显示空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59515117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com