2016-04-10 12 views
1

tek düğmesini kullanarak bir dizi bir etikette değişiklik metni birden çok kez: "başlatma" Açıkçası söyleyerek etiketi değiştirirTkinter: Burada bu hızlı örnek var

from tkinter import * 

root = Tk() 

display = Label(root,text="Starting") 
display.pack() 

def change(): #Do on first press of button 
    global display 
    display.config(text="I just changed") 

def change1(): #Do on second press of button 
    global display 
    display.config(text="I changed again") 

def change2(): #Do on third press of button 
    global display 
    display.config(text="I changed once more") 

button = Button(root,text="Press me",command=change) 
button.pack() 

üzerine "Ben sadece değişti" için Düğmeye ilk basıldığında, ancak aynı düğmenin ardışık basmalarındaki diğer iki işlevi (change1 ve change2) nasıl yapabilirim?

+1

bir ham bir fikir bazı küresel sayaç değişkeni 'n' oluşturmak ve hangi değerin n dayanan metni değiştirecek bir işleve sahip olmaktır. 'N' her zaman istediğiniz etiketlerin sınırları içinde kalmasını istediğinizden emin olmak için 'n' modülü 'etiketli etiket sayısı' – Dzhao

+0

yapıp düğmeyi yapılandırabilir ve komutu değiştiririm. – TheRandomGuy

cevap

-2

Bunu yapmak için, düğmeye basıldığında hangi sürenin izlendiğini izlemek için bir değişken tanımlamanız gerekir. Ayrıca, değişkeni arttırmak ve değişkenin durumunu test etmek için bir güncelleme fonksiyonu yapmanız gerekir. Örneğin

:

from tkinter import * 

root = Tk() 

display = Label(root,text="Starting") 
displayState = 1 
display.pack() 

def change(): 
    global displayState, display 

    if displayState == 1: 
     display.config(text="I just changed") 

    elif displayState == 2: 
     display.config(text="I changed again") 

    elif displayState == 3: 
     display.config(text="I changed once more") 

    displayState += 1 

button = Button(root,text="Press me",command=change) 
button.pack() 

root.mainloop() 
+1

'da düzenleme yapacak, böylece görüntüleme durumu 4'e yükseldiğinde ne olur? Displayout'unuzu 1, 2, 3 aralığında tutmak için bir yönteme ihtiyacınız var. – Dzhao

+0

Bu işe yaramayacak. Sayacı hiçbir zaman sıfırlamıyorsunuz ... ve global olmak için ekrana ihtiyacınız yok. – Pythonista

2

Etiket metninin neyi değiştireceğini belirlemek için sayaç ayarlayabilir ve daha sonra sayaç düğmesine basmak için sayacın maksimum sıfırlamaya ulaştığı zaman ayarlayabilirsiniz. Buradaki etiketi değiştirmek için aslında global'a ihtiyacınız yok.

from tkinter import * 

root = Tk() 

display = Label(root,text="Starting") 
display.pack() 

def _change(): 

    if button.counter == 0: 
     display.config(text="I just changed") 
    elif button.counter == 1: 
     display.config(text="I changed again") 
    else: 
     display.config(text="I changed once more") 
    if button.counter != 2: 
     button.counter += 1 
    else: 
     button.counter = 0 

button = Button(root,text="Press me",command=_change) 
button.counter = 0 
button.pack() 
root.mainloop() 
+0

Gerçekten de, kişisel olarak bir '' '' '' '' '' '' '' '' '' '' '' '' '' '' ''' '' '' '' '' 'bir özniteliğini global bir değişken değil,' '' '' hale getirmeme rağmen. Düğmeyi oluşturduktan sonra 'button.counter = 0' öğesini ayarlamanız yeterli, ardından 'global' gerekli değildir. – Siwel

+0

Doğru. Ben kaba bir örnek oluşturuyor ve ben giderken düzenleme yapıyordum. – Pythonista