2016-04-10 4 views
1

を使用して、一連の変更ラベルのテキストを複数回、私はここに、この簡単な例があります:のTkinter:シングルボタン

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() 

これは明らかに「私はちょうど変更」に「起動」と言ってラベルを変更します最初のボタンを押すだけですが、同じボタンを連続して押すと、他の2つの機能(change1とchange2)をどうすればいいのですか?

+1

粗製のアイデアはいくつかのグローバルカウンタ変数 'N'を作成し、どのような値nはに基づいてテキストを変更する関数を持つことです。 'n'が常にすべてのラベルの範囲内に収まっていることを確認するには、' n'係数 ''ラベルテキストの数 ' – Dzhao

+0

を設定し、コマンドを変更します。 – TheRandomGuy

答えて

-2

これを行うには、ボタンを押した時間を記録する変数を定義する必要があります。 変数を増やして変数の状態をテストする更新機能も必要です。例えば

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

で編集しますので、表示状態が4になるとどうなりますか? 'displaystate'を1、2、3の範囲内に保つ方法が必要です。 – Dzhao

+0

これはうまくいかないでしょう。あなたはカウンターをリセットすることはありません...そして、あなたはグローバルにもディスプレイにもディスプレイを必要としません – Pythonista

2

ラベルテキストを変更する対象を決定するカウンタを設定できます。カウンタが最大値に達すると、それ以降のボタン押下を処理するためにリセットされます。ここでラベルを変更するには実際にglobalは必要ありません。

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

確かに、私は個人的に 'counter'をグローバル変数ではなく' button'の属性にします。ボタンを作成した後に 'button.counter = 0'を設定するだけで、' global'は全く必要ありません。 – Siwel

+0

真。私は、私が行っているように、大まかな例と編集をしていました。 – Pythonista

関連する問題