【问题标题】:Tkinter - Why is my background/frame not re-painting?Tkinter - 为什么我的背景/框架没有重新绘制?
【发布时间】:2011-10-12 03:37:17
【问题描述】:

我不确定我是否走在正确的轨道上——但我开始使用 Python 进行 GUI 编程。

我的所有按钮和条目都已解决。我遇到的主要问题是掷骰子并放置结果的方法。

def roll(self):
    self.die = Die(int(self.sides.get())) # gets from label
    t = self.die.roll()
    t += int(self.mod.get()) # gets from label
    self.result = Label(self.root, text=t).grid(row=2, column=1, sticky=W)

我的问题是我在旧标签上重新实例化标签吗?旧标签的文本不应该被破坏,框架应该只在其位置显示新标签吗?

【问题讨论】:

  • 您能以对他人有所帮助的方式回答您自己的问题吗?如果你这样做,你可以选择你的作为正确答案。这可能看起来很奇怪,但它是处理此类情况的首选方式。

标签: python user-interface tkinter


【解决方案1】:

在我看来,您并没有以最佳价值使用对象。你应该这样修改你的代码:

  • 每次需要新卷时,都会实例化一个新的Die。为什么不保留相同的实例?
  • 每次你想显示卷,你实例化一个新的Label。也许您不知道这一点,但您可以使用其configure() 方法更新标签文本(和任何 Tkinter 小部件)。这意味着您只需在第一次grid 实例。

顺便说一句,.grid 返回None。如果要保留结果标签的引用,则必须使用两行 Label 实例化:

self.result = Label(self.root, text=t)  # first creating instance...
self.result.grid(row=2, colum=1, sticky=W)  # ... and placing it in self.root

尝试像这样更新您的代码。您肯定会觉得有必要将其中一些代码移至self__init__() 函数中,因此也将其写在您的问题中。

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多