我不确定我是否在正确的轨道上——但是我是从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__()
函数中,因此也将其写入您的问题中。