Tkinter StringVar()显示为空白

时间:2019-12-28 21:45:34

标签: python macos tkinter label

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

我正在使用set方法来更新值,但是在运行应用程序时,文本永远不会显示。

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

correction = 0
block_hit_list = pygame.sprite.spritecollide(self, self.level.platform_list, False)
for block in block_hit_list:
    if self.xVel < 0:
        self.friction()
        correction = self.rect.right - block.rect.left
    elif self.xVel > 0:
        self.friction()
        correction = self.rect.left - block.rect.right

if correction != 0:
    for block in self.level.platform_list:
        block.rect.x += correction

self.rect.y += self.yVel

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

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())

1 个答案:

答案 0 :(得分:0)

问题是您将循环变量用作小部件选项的值,这些值会更改循环的每次迭代。我认为以下内容将通过使用辅助函数来避免该问题-但由于您未在问题中提供minimal reproducible example,因此无法验证。

请注意,您还省略了self方法上的create_widgets()参数。

    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())