Tkinter语言 - 为什么我的背景/框架没有重新绘制



我不确定我是否在正确的轨道上——但是我是从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)

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

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

  • 每次需要一个新的roll时,实例化一个新的Die。为什么不保留相同的实例呢?
  • 每次要显示滚动时,都要实例化一个新的Label。也许你没有意识到这一点,但你可以更新标签文本(和任何Tkinter小部件),使用它的configure()方法。这意味着您只需要在第一次时对实例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__()函数中,因此也将其写入您的问题中。

最新更新