变量为0时禁用Tkinter按钮

时间:2016-05-25 21:58:47

标签: python tkinter

我仍在学习python,所以我的其余代码可能存在缺陷,但我的主要问题是当Wood和Stone变量为0时我无法禁用此按钮。我尝试使用while语句 stone>时运行 button.config(state = DISABLED)命令0和木材> 0 但这似乎没有用。

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

编辑: 我认为现在正在发生的是它不经常检查变量以查看它是否低于零,因此根本不会禁用。我可能需要考虑的是在 craftPick 函数中运行的检查。

1 个答案:

答案 0 :(得分:0)

我认为你的问题是你的变量是0而不是负数。

因此,当你检查你的变量是否小于0时,它不会禁用它,因为你的变量不小于0,它正好是0.

尝试更好的

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)

另外,你必须避免循环。

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)