2014-03-06 61 views
0

以外的窗口內的所有內容我想在按下GameButton按鈕時銷燬窗口根內的所有內容,但是我希望發生其他事情,所以唯一的方法是爲按鈕運行一個功能。當我在主類之外執行self.destroy時,沒有東西被刪除,是否有解決方法?在下面的代碼中破壞函數Tkinter

from PIL import Image, ImageTk 
from Tkinter import Tk, Label, BOTH,W, N, E, S, Entry, Text, INSERT, Toplevel 
from ttk import Frame, Style, Button, Label 
import Tkinter 
import Callingwordlist 
difficulty = "" 

class MainMenuUI(Frame): 

    def __init__(self, parent): 
     Frame.__init__(self, parent) 

     self.parent = parent 

     self.initUI() 

    def initUI(self): 

     self.parent.title("Type!") 
     self.pack(fill=BOTH, expand=1) 

     style = Style() 
     style.configure("TFrame", background="black")   

     Logo = Image.open("Type!.png") 
     TypeLogo = ImageTk.PhotoImage(Logo) 
     label1 = Label(self, image=TypeLogo) 
     label1.image = TypeLogo 
     label1.place(x=342,y=80) 
     label1.pack() 

     self.pack(fill=BOTH, expand=1) 

     GameButton = Button(self, text="Main Game", command=lambda: main2(self.parent,self)) 
     GameButton.pack() 
     GameButton.place(x=344,y=200,height = 80,width = 176) 

     TutorialButton = Button(self,text="Tutorial Level") 
     TutorialButton.pack() 
     TutorialButton.place(x=344, y=300 ,height = 80,width = 176) 

     quitbutton = Button(self, text= "Quit",command=self.parent.destroy) 
     quitbutton.place(x=344, y=400,height = 80,width = 176) 

def main2(root,self): 
    self.destroy 
    app = MainGameUI(root) 
    root.mainloop() 

class MainGameUI(root): 
    .... 

def main(): 

    root = Tk() 
    root.geometry("860x640+300+300") 
    app = MainMenuUI(root) 
    root.mainloop() 

if __name__ == '__main__': 
    main() 

回答

0

你實際上並沒有破壞你的函數中的任何東西。看看這段代碼:

def main2(root,self): 
    self.destroy 
    app = MainGameUI(root) 
    root.mainloop() 

注意函數中的第一行,你試圖銷燬所有的東西。你的代碼是self.destroy - 注意缺少括號。你實際上並不是的調用的功能,你只是簡單的引用它。添加括號稱爲:self.destroy()

你還有一個問題,就是你正在調用一個銷燬調用該函數的小部件的函數。但是,這個函數進入一個無限循環(mainloop()),所以按鈕命令永遠不會返回。我不完全確定這裏會發生什麼,你可能會遇到某種錯誤。底線是,從按鈕命令調用mainloop不是一個好主意。

由於您正在構建您的應用程序,因此應用程序是一個框架(而不是根窗口),因此不需要重新啓動事件循環。當您摧毀MainMenuUI小部件時,事件循環將繼續運行。沒有必要重新啓動它。

+0

感謝您的建議,現在一切都正常工作,並刪除root.mainloop減少了我的代碼 – Dolan