2013-02-12 22 views
5

Diğer dillerdeki bir tür deneme programcı olmama rağmen, Python'da çok yeniyim. Başladıktan sonra mainloop çıkmak için çok basit bir şey yapmaya çalışıyorum. Öyle görünüyor ki, büyük bir anlaşma. Aşağıdaki program sadece bir dizi olay yapar. Her şey çalışıyor gibi görünüyor, ancak son pencereyi kapatamıyorum ... Ne yapmalıyım?python'da ana menüden çıkma

from Tkinter import * 

root=Tk() 
theMainFrame=Frame(root) 
theMainFrame.pack() 



class CloseAfterFinishFrame1(Frame): # Diz que herda os parametros de Frame 
    def __init__(self): 
     Frame.__init__(self,theMainFrame) # Inicializa com os parametros acima!! 
     Label(self,text="Hi",font=("Arial", 16)).pack() 
     button = Button (self, text = "I am ready", command=self.CloseWindow,font=("Arial", 12)) 
     button.pack()    
     self.pack() 

    def CloseWindow(self): 
     self.forget() 
     CloseAfterFinishFrame2() 



class CloseAfterFinishFrame2(Frame): # Diz que herda os parametros de Frame 
    def __init__(self): 
     Frame.__init__(self,theMainFrame) # Inicializa com os parametros acima!! 
     Label(self,text="Hey",font=("Arial", 16)).pack() 
     button = Button (self, text = "the End", command=self.CloseWindow,font=("Arial", 12)) 
     button.pack() 
     self.pack()   
    def CloseWindow(self): 
     self.forget() 
     CloseEnd() 


class CloseEnd(): 
    theMainFrame.quit() 



CloseAfterFinishFrame1() 

theMainFrame.mainloop() 
+0

'root .withdraw()' – user19911303

cevap

4

Çağrı root.quit() değil theMainFrame.quit:

import Tkinter as tk 

class CloseAfterFinishFrame1(tk.Frame): # Diz que herda os parametros de Frame 
    def __init__(self, master): 
     self.master = master 
     tk.Frame.__init__(self, master) # Inicializa com os parametros acima!! 
     tk.Label(self, text="Hi", font=("Arial", 16)).pack() 
     self.button = tk.Button(self, text="I am ready", 
          command=self.CloseWindow, font=("Arial", 12)) 
     self.button.pack() 
     self.pack() 

    def CloseWindow(self): 
     # disable the button so pressing <SPACE> does not call CloseWindow again 
     self.button.config(state=tk.DISABLED) 
     self.forget() 
     CloseAfterFinishFrame2(self.master) 

class CloseAfterFinishFrame2(tk.Frame): # Diz que herda os parametros de Frame 
    def __init__(self, master): 
     tk.Frame.__init__(self, master) # Inicializa com os parametros acima!! 
     tk.Label(self, text="Hey", font=("Arial", 16)).pack() 
     button = tk.Button(self, text="the End", 
          command=self.CloseWindow, font=("Arial", 12)) 
     button.pack() 
     self.pack() 

    def CloseWindow(self): 
     root.quit() 

root = tk.Tk() 
CloseAfterFinishFrame1(root) 
root.mainloop() 

Ayrıca, yapmak istediğiniz tüm işlev root.quit çağırmak ise bir sınıf CloseEnd yapmak gerek yoktur.

+0

'u kullanabilirsiniz. Teşekkür ederiz! Ancak Düğmeye basıldıktan sonra, program sıkıştı! Ben python 2.7.3 kullanıyorum! Bu arada, Tkinter'i tk olarak tanımlamanın avantajı nedir? Diğer insanların da bunu yaptığını gördüm, ama nedenini anlamadım! – DanielTheRocketMan

+0

IDE kullanıyor musunuz? Eğer öyleyse, komut dosyasını komut satırından çalıştırmayı deneyin: 'python script.py'. Bence iyi çalışması gerekiyor. – unutbu

+1

Bazıları 'Tkinter'den içe aktarma' seçeneğinin iyi olduğunu iddia etse de, aslında, 'Tkinter' in yazarı bu şekilde ithal edilmesini tasarladı - * genel olarak * sadece 'import * ...' etkileşimli oturumlarda, komut dosyalarında değil. Daha ayrıntılı "import Tkinter tk" yi kullanarak, her nesnenin nereden geldiğini netleştirirsiniz. Bu, diğer kişilerin kodunu ayıklarken veya okurken yardımcı olur ve iki modül aynı adları kullandığında isim çarpışmaları önler. Örneğin, numpy.sum, yerleşik Python 'toplamından farklıdır. 'numpy'den içe aktarma' korkunç olur. – unutbu

İlgili konular