2016-04-05 39 views
0

, basitleştirmek için 2 Tkinter konu yönetmek:Python Python 2.7 Tkinter kullanarak bir uygulama üzerinde çalışıyorum 2.7

from Tkinter import * 

class rootWindow(Thread): 
    def __init__(self): 
     Thread.__init(self) 
     self.root = Tk() 
     self.button = Button(self.root,text="Execute",command=self.exec) 
     self.start() 
     self.join() 

    def run(self): 
     self.root.mainloop() 

    def exec(self): 
     # instruction 1 
     # instruction 2 
     # ... 
     # End instructions 

sorunu (bu değiştirmek için bir excel dosyası var) exec() işlev bir zaman alır olduğunu .

exec() işlevi işini yaparken ikinci bir pencereyi ('lütfen bekleyin' animasyonu veya progressbar veya bir şeyle) çalıştırmak istiyorum. Yani benim yarattığım:

class waitWindow(Thread): 
    def __init__(self): 
     Thread._init__(self) 
     self.wait = Tk() 
     self.pb = ttk.Progressbar() 
     self.pb.pack() 
     self.start() 

    def run(self): 
     self.wait.after(16000, self.des) 
     self.wait.mainloop() 

    def des(self): 
     self.wait.destroy() 

ve ben exec() fonksiyonu çalıştırmadan önce bu konuya aradı. Başlatma iyi ama ikinci iş parçacığı geçtikten sonra 16000 ms sonra ikinci iş parçacığı durdurulamıyor.

Herhangi bir fikrin var mı? İkinci parçayı 16000 ms içinde nasıl durdurabilirim? thank peşin!

+0

Kiriş ve bu gibi konuları kullanmak muhtemelen kötü bir fikirdir. Bunu [blog article] (http://stupidpythonideas.blogspot.com/2013/10/why-your-gui-app-freezes.html) makale için –

+0

thank okumasını öneriyorum, kontrol edeceğim! –

cevap

1

Kodunuzda iki sorun var. Birincisi, tüm tkinter kodunun aynı iş parçacığında çalışması ve ideal olarak ana iş parçacığı olmasıdır. Excel dosyasını işleyen kod, başka bir iş parçacığında olması gereken koddur.

İkincisi, birden fazla pencereye gereksiniminiz varsa, ikinci ve sonraki pencerelerin Tk yerine Toplevel örnekleri olması gerekir.

+0

aslında çok açıklıyor, tavsiyelerinizi takip etmeye çalışacağım, teşekkür ederim! –