2011-10-12 49 views
1

我不确定我是否在正确的轨道上 - 但我使用Python开始了GUI编程。Tkinter - 为什么我的背景/框架不能重新绘画?

我有我所有的按钮和条目制定出来。我遇到的主要问题是使用掷骰子和放置结果的方法。

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) 

我的问题是我重新实例化旧标签的事实吗?旧标签的文本是否应该被破坏,框架应该只显示新的标签?

+0

你能以一种能帮助别人的方式回答你自己的问题吗?如果你这样做,你可以选择你的正确答案。这看起来很奇怪,但它是处理这种情况的首选方式。 – Will

回答

2

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

  • 每次你需要一个新的滚动,你实例化一个新的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__()函数中,所以在你的问题中写下它。

相关问题