2016-04-04 38 views
0

Bu benim ilk gönderiimde stackoverflow var ama kod yolunda darbelere isabet ettikten sonra bir süredir cevapları kullanıyorum. Karanlık gün, cevabı bulamamış olduğum yere geldi. Eğer yardımcı olabilirseniz lütfen bana bildirin.Python - TKinter "zaman aşımına uğradı"

Program oldukça basittir Masaüstümde oturan ve belirli dosyalarda kaç dosya olduğunu söyleyen bir widget oluşturmak için Tkinter kullanıyorum. Yaklaşık 10 dakika çok iyi çalışıyor gibi görünüyor ve sonra çalışmayı durdurur. Yanlış bir şey olduğunu fark edinceye kadar sadece donuyor bir hata mesajı çakma ya da ping değil ve sonra üzerine tıklamak veya kapatmak için çalıştığınızda çalışmayı durdurdu diyor. Tüm yardım gerçekten apprciated olacağını

import Tkinter as tk 
import time 
import os 
from Tkinter import Tk, Label, BOTH 
from ttk import Frame, Style 


class SampleApp(tk.Tk): 
    def __init__(self, *args, **kwargs): 

     tk.Tk.__init__(self, *args, **kwargs) 
     self.clock = tk.Label(self, text="") 
     self.clock.pack() 


     # start the clock "ticking" 
     self.update_clock() 


    def update_clock(self): 

     ptc = len(os.listdir("Folder Dir")) 
     if ptc != 0: 
      label1 = Label(self, text="Pre TC", fg="red") 
     else: 
      label1 = Label(self, text="Pre TC") 
     label1.place(x=0, y=0) 
     if ptc != 0: 
      label2 = Label(self, text=ptc, fg="red") 
     else: 
      label2 = Label(self, text=ptc) 
     label2.place(x=90, y=0) 


     pp = len(os.listdir("Folder Dir")) 
     if pp != 0: 
      label3 = Label(self, text="PP", fg="red") 
     else: 
      label3 = Label(self, text="PP") 
     label3.place(x=0, y=65) 
     if pp != 0: 
      label4 = Label(self, text=pp, fg="red") 
     else: 
      label4 = Label(self, text=pp) 
     label4.place(x=90, y=65) 



     stc = len(os.listdir("Folder Dir")) 
     if stc != 0: 
      label5 = Label(self, text="Super TC", fg="red") 
     else: 
      label5 = Label(self, text="Super TC") 
     label5.place(x=0, y=150) 
     if stc!= 0:  
      label6 = Label(self, text=stc, fg="red") 
     else: 
      label6 = Label(self, text=stc) 
     label6.place(x=90, y=150) 



     wff = len(os.listdir("Folder Dir")) 
     if wff != 0: 
      label7 = Label(self, text="WIN FF", fg="red") 
     else: 
      label7 = Label(self, text="WIN FF") 
     label7.place(x=0, y=230) 

     if wff != 0: 
      label8 = Label(self, text=wff, fg="red") 
     else: 
      label8 = Label(self, text=wff) 
     label8.place(x=90, y=230) 



     wa = len(os.listdir("Folder Dir")) 
     if wa != 0: 
      label9 = Label(self, text="Wave Agent", fg="red") 
     else: 
      label9 = Label(self, text="Wave Agent") 
     label9.place(x=0, y=315) 
     if wa != 0: 
      label10 = Label(self, text=wa, fg="red") 
     else: 
      label10 = Label(self, text=wa) 
     label10.place(x=90, y=315) 



     bwf = len(os.listdir("Folder Dir")) 
     if bwf != 0: 
      label11 = Label(self, text="BWF", fg="red") 
     else: 
      label11 = Label(self, text="BWF") 
     label11.place(x=0, y=395) 
     if bwf != 0: 
      label12 = Label(self, text=bwf, fg="red") 
     else: 
      label12 = Label(self, text=bwf) 
     label12.place(x=90, y=395) 



     swi = len(os.listdir("Folder Dir")) 
     if swi != 0: 
      label13 = Label(self, text="Switch", fg="red") 
     else: 
      label13 = Label(self, text="Switch") 
     label13.place(x=0, y=480) 
     if swi != 0: 
      label14 = Label(self, text=swi, fg="red") 
     else: 
      label14 = Label(self, text=swi) 
     label14.place(x=90, y=480) 

     # call this function again in one second 
     self.after(1000, self.update_clock) 

def main(): 
    app = SampleApp() 
    app.title('Counter') 
    app.geometry("50x510+1000+8") 
    app.mainloop() 

if __name__== "__main__": 
    main() 

:

İşte benim kod!

Şerefe!

cevap

2

Her saniyede 14 yeni widget oluşturuyorsunuz gibi görünüyor, ancak eskilerden hiçbirini yok etmiyorsunuz. Bundan on dakika sonra, 8,400 öğeyi takip etmesi gereken bir pencere var. Daha oluşturmak

  • .destroy() önceki tüm widget'ları önce:

    Ben iki çözüm bakın.

  • Programın başlangıcında tam olarak bir kez 14 widget'ı oluşturun, ardından her bir update_clock çağrısı sırasında metnini değiştirmek için .config yazın.
+0

arka planda oluşturulmuş yeni widget'lar nelerdir? programı çalıştırdığınızda yeni pencereleri göremiyorsunuz –

+0

Yeni widget'lar eski widget'larla aynı pencerede görünür. Yeni widget'lar eskilere benzer şekilde yerleştirilir ve bunların üstünde görünür, dolayısıyla eskiler artık görünmez. Ama hala oradalar. – Kevin

+0

Ahh bu bir tonluk hissi veriyor! Sadece hızlı cevap için teşekkür etmek istiyorum! Sanırım ihtiyacım olan başka bir bilgiye bakmak için cevabınızdan çıkacak kadar büyük olasılıkla var, teşekkürler. –