2016-05-25 3 views
1

Ich lerne Python noch so der Rest meines Codes kann fehlerhaft sein, aber mein Hauptproblem ist, kann ich diese Schaltfläche nicht deaktivieren, wenn die Variable Holz und Stein bei 0 sind versuchte mit einer while-Anweisung, die button.config (state = deaktiviert) Befehl ausgeführt, wenn Stein> 0 und Holz> 0, aber das schien nicht zu funktionieren.Deaktivieren Sie eine Tkinter-Schaltfläche, wenn die Variablen 0 sind

from tkinter import * 
from tkinter import tkk 

class main: 
def __init__(self, master): 
    frame = Frame(master) 
    frame.pack() 
    self.CraftPickaxe = Button(frame, text = 'Pickaxe', command = self.craftPick) 
    self.CraftPickaxe.pack() 
    ###RESOURCES### 
    self.wood = 1 
    self.stone = 1 
    self.pickaxe = 0 
def craftPick(self): 
    self.stone -= 1 
    self.wood -= 1 
    self.pickaxe += 1 
    print(self.stone) 
    print(self.wood) 
    print(self.pickaxe) 
def loop(self): 
    while True: 
     if self.stone < 0 and self.wood < 0: 
      self.CraftPickaxe.config(state=DISABLED) 
     elif self.stone > 0 and self.wood > 0: 
      self.CraftPickaxe.config(state=NORMAL) 



root = Tk() 
b = main(root) 
root.mainloop() 

EDIT: was ich denke, jetzt passiert ist, ist, dass es nicht ständig um die Variablen zu überprüfen, ob es unter Null geht und daher nicht zu deaktivieren. Was ich denke, möglicherweise muss passieren, ist ein Scheck, der in der CraftPick Funktion läuft.

Antwort

0

Ich denke, dass Ihr Problem ist, dass Ihre Variable 0 und keine negative Zahl ist.

Also, wenn Sie überprüfen, ob Ihre Variable kleiner als 0 ist es nicht deaktiviert werden, weil Ihre Variable nicht kleiner als 0 ist, ist es genau 0.

Versuchen mit dieser besser

while True: 
    if self.stone < 1 and self.wood < 1: 
     self.CraftPickaxe.config(state=DISABLED) 
    elif self.stone > 0 and self.wood > 0: 
     self.CraftPickaxe.config(state=NORMAL) 

Außerdem müssen Sie die Schleife vermeiden.

def craftPick(self): 
    self.stone -= 1 
    self.wood -= 1 
    self.pickaxe += 1 
    if self.stone < 1 and self.wood < 1: 
     self.CraftPickaxe.config(state=DISABLED) 
    elif self.stone > 0 and self.wood > 0: 
     self.CraftPickaxe.config(state=NORMAL) 
+0

Ja, das scheint könnte eines der Probleme gewesen sein. obwohl, was ich denke, passiert jetzt ist, dass es nicht ständig überprüft die Variablen zu sehen, ob es unter Null geht und daher überhaupt nicht deaktivieren – Joi

+0

Wenn es Ihre Frage gelöst, denken Sie daran, upvote und wählen Sie als richtige Antwort :) Wenn nicht versuchen, aktualisieren die Details, damit ich dir weiterhelfen kann – Juanvulcano

+0

Ja danke dafür, Scheint sehr einfach, wenn ich jetzt darüber nachdenke. Als richtige Antwort ausgewählt :) – Joi