2016-03-21 15 views
1

Liste kutusu verilerini otomatik olarak güncelleştirmek istiyorum. kodumda sorun ne?Tkinter Liste Kutusu metin değişkeni nasıl güncellenir

import Tkinter,time 
from Tkinter import * 
window=Tk() 
box=Tkinter.Listbox(window,width=17,height=12,fg="black") 
data=0 
box.grid(row=0,column=0) 
box.insert(Tkinter.END,data) 
def monitor(): 
    global data 
    print data 
    while True: 
     time.sleep(1) 
     data=data+1 
     box.update() 
window.after(10,monitor) 
window.mainloop() 
+0

Sorun nedir? – zondo

+0

liste kutusu her zaman 0 göstermiyor. –

+0

Bunun nedeni, 'kutu' içeri aktarılan nesnenin * adıyla * ilgilenmemesidir. Sadece nesneye dikkat eder. Aslında, nesnenin isminin 'data' olduğunu bilmesinin bir yolu yoktur. "Data = data + 1" dediğinizde, nesneyi değiştirmiyorsunuz; "veri" yi farklı bir numaraya yönlendiriyorsunuz. Verileri yeniden eklemeniz gerekiyor. Sanırım bu, 'box.delete (Tkinter.END); box.insert (Tkinter.END, data) ' – zondo

cevap

2

Her şeyden önce lütfen kodunuzla tutarlı olun. bir kütüphaneye

import Tkinter as tk 

İkinci yönelik ithalat

  • kullanın bir tür, while True yapılar mümkünse ommitted edilecektir. window.after'i ana rutininizde kullandınız, neden monitörünüzde bunu yapmıyorsunuz?

    def monitor(): 
        global data 
    
    
        # do the work that needs to be done... 
    
        # after uses ms, to calling monitor 
        # after 1000 ms is the same as calling 
        # sleep(1) in your while true construct 
        window.after(1000, monitor) 
    

    Son olarak, zodo doğrudur, liste kutusu verilerini, örn. kombinasyonu sil/ekle.

    import Tkinter as tk 
    window = tk.Tk() 
    box = tk.Listbox(window, width=17, height=12, fg="black") 
    data = 0 
    box.grid(row=0, column=0) 
    box.insert(tk.END, data) 
    
    def monitor(): 
        global data 
    
        print data 
    
        data = data + 1 
        # Update the listbox 
        # 1. clear all 
        box.delete(0, tk.END) 
        # 2. insert new data 
        box.insert(tk.END, data) 
        window.after(1000, monitor) 
    
    window.after(10, monitor) 
    window.mainloop() 
    
+0

Küresel olarak kutu veya pencere bildirmeniz gerekmez. –

+0

Bu benim için ilginç - nasıl, Bryan? – R4PH43L

+0

Python, genel değişkenleri otomatik olarak işlevlerin içinde gösterir. Değişkenleri değiştirirseniz bunları yalnızca bildirmeniz gerekir. 'Box.delete' dediğinizde, değişkeni değiştirmiyorsunuz, sadece nesne üzerinde bir yöntem arıyorsunuz. https://docs.python.org/2/faq/programming.html#what-are-the-rules-for-local-and-global-variables-in-python –