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