2016-06-21 101 views
0

我想我的「退出」按鈕關閉窗口,並結束程序,無論它被按下。現在它首先被按下,但如果首先按下「滾動」按鈕,那麼「退出」按鈕不會關閉窗口。我是一名初學者程序員,所以我確信我的代碼中存在不相關的問題,但是如果您能幫助我解決這個特定問題,請提前致謝!Python Tkinter - 退出按鈕不工作,如果其他按鈕先點擊

from Tkinter import * 
from random import randint 

class Application(Frame): 

def displayBoard(self): 
    self.canvas1 = Canvas(self, width=200, height=200) 
    self.canvas1.pack() 
    self.canvas2 = Canvas(self, width=200, height=200) 
    self.canvas2.pack() 

    self.roll_button = Button(self, text="Roll the Dice", command=self.roll) 
    self.roll_button.pack() 

    self.clear = Button(self, text="Clear", command=self.resetBoard) 
    self.clear.pack() 

    self.quit = Button(self, text="Quit", command=self.quit) 
    self.quit.pack() 


def __init__(self, master=None): 
    Frame.__init__(self, master) 
    Pack.config(self) 


def roll(self): 
    die1 = faces[(randint(1,6)-1)] 
    die2 = faces[(randint(1,6)-1)] 
    self.resetBoard() 
    self.canvas1.create_text(20, 30, anchor=W, text=die1) 
    self.canvas1.pack() 

    self.canvas2.create_text(20, 30, anchor=W, text=die2) 
    self.canvas2.pack() 


def resetBoard(self): 
    self.canvas1.destroy() 
    self.canvas2.destroy() 
    self.clear.destroy() 
    self.roll_button.destroy() 
    self.quit.destroy() 
    self.displayBoard() 

def quit(self): 
    self.master.quit() 
    self.master.destroy() 

master = Tk() 


    face1 = """\n 
__________ 
|     | 
|     | 
|  ()  | 
|     | 
|__________| 
""" 

face2 = """\n 
__________ 
|     | 
|   ()  | 
|     | 
| ()   | 
|__________| 
""" 
face3 = """ \n 
__________ 
|     | 
|   () | 
|  ()  | 
| ()   | 
|__________| 
""" 


face4 = """\n 
__________ 
|     | 
| () ()  | 
|     | 
| () ()  | 
|__________| 
""" 

face5 = """ \n 
__________ 
|     | 
| () () | 
|  ()  | 
| () () | 
|__________| 
""" 

face6 = """ \n 
__________ 
|     | 
| () () | 
| () () | 
| () () | 
|__________| 
""" 

faces = [face1, face2, face3, face4, face5, face6] 

dicegame = Application() 
dicegame.displayBoard() 
dicegame.mainloop() 
+0

嘗試重命名你的'退出()'函數;當你嘗試重新設置開發板時,可能會發現'self.quit'是一個'Button',並且正在調用該按鈕作爲它的動作。可能會拋出一個只是沉默或內容的內部死亡參考。 – Delioth

+0

@Delioth:這正是發生的事情。 'self.quit'在這段代碼的不同時間意味着不同的事物。 –

回答

0

(對於後面這個問題的程序員誰在這裏跌倒)

這個問題是你有功能self.quit按鈕self.quit。 Python不會重載名稱 - self.quit初始化後是一個函數,但在第一次調用self.resetBoard後,按鈕self.quit關聯 - 破壞了對函數的引用。

解決方法是重命名其中一個,並記住避免命名衝突。一些Python的方式包括:

  • 內部函數可以用領先被命名爲下劃線self._quit()
  • 避免發生命名空間衝突與內建命令(退出()是內置的)通常與尾部進行強調self.quit_()
  • 更具描述性的名稱爲您的按鈕,即self.quit_button;或你的函數,即self.on_quit()self.quit_app()self.destroy()(注意,最後一個需要調用super()。destroy()方法裏面的某個地方,否則你會打破的東西)
+0

非常感謝!解決了它。非常感激。 –