2011-10-12 56 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__()函數中,所以在你的問題中寫下它。

相關問題