2014-09-02 36 views
0

我試圖在Python中製作一個虛擬骰子,並使用tkinter作爲GUI,基本上生成一個隨機數字表格1-6,但我無法獲取更新的標籤與'滾動'的結果。任何人都可以幫助我嗎?這是我到目前爲止的代碼:試圖從一個隨機變量在tkinter中進行標籤更新

from tkinter import* 
import random 

class Application(Frame): 
    result = 0 

    def __init__(self, master): 
     Frame.__init__(self,master) 
     self.grid() 
     self.create_widgets() 

    def create_widgets(self): 
     self.label1 = Label(self) 
     self.label1["text"] = "You rolled a " + str(self.result) 
     self.label1.grid() 

     self.button1 = Button(self, text = "Roll again?") 
     self.button1["command"] = self.rd() 
     self.button1.grid() 

    def rd(self): 
     result = random.randint(1, 6) 
     self.label1.config(text= "You rolled a " + str(self.result)) 




root = Tk() 
root.title("Dice") 
root.geometry("100x50") 

app = Application(root) 

root.mainloop() 

回答

1
self.button1["command"] = self.rd() 

在這一行,你分配結果self.rd到命令rd返回無,所以你有效地說,按鈕根本沒有命令。嘗試:

self.button1["command"] = self.rd 

此外,在這些線路上:

result = random.randint(1, 6) 
    self.label1.config(text= "You rolled a " + str(self.result)) 

您創建一個變量result,但隨後的配置與self.result的標籤,這是完全獨立的result,因此會一直顯示0。嘗試:

result = random.randint(1, 6) 
    self.label1.config(text= "You rolled a " + str(result)) 

或者,如果你想跟蹤用於其他目的最後得出的結果,

self.result = random.randint(1, 6) 
    self.label1.config(text= "You rolled a " + str(self.result)) 
1

你已經做了這裏的兩個錯誤:

  1. 分配呼叫的結果self.rd(這是None)作爲按鈕的命令,而不是方法本身;
  2. 您將隨機骰子卷分配給本地名稱result,而不是類屬性self.result

正確的代碼將包括:

self.button1["command"] = self.rd 
           #^note parentheses '()' removed 

和:

def rd(self): 
    self.result = random.randint(1, 6) 
    #^note 'self.' added 
    self.label1.config(text= "You rolled a " + str(self.result)) 
+0

@Xynoceros http://stackoverflow.com/help/someone-answers – jonrsharpe 2014-09-02 14:20:46