2016-10-19 3 views
0

So in meinem tkinter Python-Programm rufe ich einen Befehl auf, wenn eine Schaltfläche geklickt wird. Wenn das passiert, führt es eine Funktion aus, aber in der Funktion habe ich beim ersten Klick auf die Schaltfläche eine Bezeichnung für etwas gesetzt und danach sollte nur die genannte Bezeichnung aktualisiert werden. Im Grunde ändert sich nach dem Versuch der Versuch, 1 sicherzustellen, dass die if-Anweisung das sieht und nicht passieren lässt. Es wird jedoch immer zurückgesetzt und ich weiß nicht, wie ich es stoppen kann. Wenn Sie auf die Schaltfläche klicken, egal ob zuerst oder dritt, wird die Schaltfläche zurückgesetzt und der Beweis dafür erfolgt, weil die h gedruckt wird. Es ist, als ob die Funktion neu startet, aber das sollte nicht, da es eine Schleife für die GUI ist.Befehl Funktion für Schaltfläche "setzt"

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 

Auch für diejenigen, die meine vorherige Frage sah ich brauche noch Hilfe mit, dass ich auch gerade auch diesen Fehler beheben möchten.

Antwort

1

Am Anfang der Funktion fight setzen Sie attempt = 0, so dass Sie es zurücksetzen.

Neben attempt ist lokale Variable. Es wird erstellt, wenn Sie die Funktion fight ausführen, und es wird gelöscht, wenn Sie die Funktion fight verlassen. Sie müssen globale Variable (oder globale IntVar)

attempt = 0 

def fight(): 
    global attempt 

BTW verwenden: von nur 0/1 in attempt Werte verwenden, dann können Sie True/False verwenden.

attempt = False 

def fight(): 
    global attempt 

    ... 

    if not attempt: 

     attempt = True 
Verwandte Themen