2016-10-19 5 views
0

私のtkinterのpythonプログラムでは、ボタンをクリックしたときにコマンドを呼びます。それが起こると、それは関数を実行しますが、関数では、最初にボタンをクリックしたときに何かにラベルを設定した後、そのラベルのみを更新する必要があります。基本的には、試行の後に、試行を1に変更し、ifステートメントがそれを見て、それが通過するのを許可しないようにします。しかし、それはリセットを維持し、私はそれを停止する方法を知らない。最初または3番目にボタンをクリックすると、ボタンがリセットされ、hが印刷されるために起こることが証明されます。それはあたかも関数が再起動したかのようですが、それはGUIのループなので、そうしてはいけません。ボタン "リセット"のコマンド機能

def fight(): #Sees which one is stronger if user is stronger he gets win if no he gets loss also displays enemy stats and removes used characters after round is finished 

try: 
    attempt=0 
    namel = "" 
    namer="" 
    left = lbox.curselection()[0] 
    right = rbox.curselection()[0] 

    totalleft = 0 
    totalright = 0 
    if left == 0: 
     namel = "Rash" 
     totalleft = Rash.total 
    elif left==1: 
     namel = "Untss" 
     totalleft = Untss.total 
    elif left==2: 
     namel = "Illora" 
     totalleft = 60+35+80 

    if right == 0: 
     namer = "Zys" 
     totalright = Zys.total 
    elif right==1: 
     namer = "Eentha" 
     totalright = Eentha.total 
    elif right==2: 
     namer = "Dant" 
     totalright = Dant.total 

    lbox.delete(lbox.curselection()[0]) 
    rbox.delete(rbox.curselection()[0]) 
    print(namel) 
    print(namer) 
    if attempt == 0: 
     wins.set("Wins") 
     loss.set("Loss") 
     print("h") 
     attempt=1 
    if (totalleft>totalright): 
     wins.set(wins.get()+"\n"+namel) 
     loss.set(loss.get()+"\n"+namer) 
    else: 
     wins.set(wins.get()+"\n"+namer) 
     loss.set(loss.get()+"\n"+namel) 
except IndexError: 
     pass 

私の以前の質問を見た人にとっても、私はまだこのバグも修正したいと思っています。

答えて

1

fightの最初に、attempt = 0を設定してリセットします。

さらにattemptはローカル変数です。関数fightを実行すると作成され、関数fightを終了すると削除されます。あなたはグローバル変数(またはグローバルIntVar)ところで

attempt = 0 

def fight(): 
    global attempt 

を使用する必要があります:あなたは、あなたがTrue/False使用できる唯一のattempt0/1値の使用します。

attempt = False 

def fight(): 
    global attempt 

    ... 

    if not attempt: 

     attempt = True 
関連する問題