Tkinter - 为什么我的背景/框架没有重新绘画?

时间:2011-10-12 03:37:18

标签: python user-interface 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)

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

1 个答案:

答案 0 :(得分: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

尝试像这样更新您的代码。您肯定会觉得有必要将部分代码移到__init__()的{​​{1}}函数中,所以也请将它写在您的问题中。