0

如何通过将所有购买按钮附加到 if 语句来禁用它们(例如对于第一个购买按钮)

if counter.get()>15:
 state="disabled
else:
 state="enabled"

我尝试了 20-50 种不同的东西,甚至将我的整个代码更改为网格样式。我只想要我拥有的代码和一种禁用按钮的简单方法,直到满足条件。最难弄清楚这一点。

import tkinter

root = tkinter.Tk()
root.geometry("480x320")
root.title("Button Clicker")

counter = tkinter.IntVar()
Ant = tkinter.IntVar()
autoclicker = 0

def onClick(event=None):
    counter.set(counter.get() + 1)

def buyAnt(event=None):
    if counter.get()-10>=0:
        counter.set(counter.get() -10) ,Ant.set(Ant.get() + 1)

def buyCat(event=None):
    if counter.get()-50>=0:
        counter.set(counter.get() -50)

def buyDog(event=None):
    if counter.get()-100>=0:
        counter.set(counter.get() -100)

def buyVillager(event=None):
    if counter.get()-200>=0:
        counter.set(counter.get() -200)

def autoclick(event=None):
    counter.set(counter.get()+1)
    root.after(1000, autoclick )

def buyAutoClicker(event=None):
    if counter.get()-15>=0:
        counter.set(counter.get() -15), autoclicker + 1, 
            root.after(1000, autoclick)


tkinter.Label(root, textvariable=counter).pack()
tkinter.Label(root, textvariable=Ant).pack()
tkinter.Button(root, text="Click", command=onClick, fg="dark green", 
    bg = "white").pack()

btn2 = tkinter.Button(root, text="Buy AutoClicker", 
    command=buyAutoClicker, fg="dark green", bg = "white").pack()

tkinter.Button(root, text="Buy Cat", command=buyCat, fg="dark green", 
    bg = "white").pack()

tkinter.Button(root, text="Buy Dog", command=buyDog, fg="dark green", 
    bg = "white").pack()

tkinter.Button(root, text="Buy Villager", command=buyVillager, 
    fg="dark green", bg = "white").pack()


root.mainloop()

我希望点击(正常)购买 AutoClicker(在计数器>15 之前灰显)

4

1 回答 1

1

configure方法允许您更改小部件的选项,可用参数取决于您正在配置的小部件。通过调用 state 参数并将其值设置为“正常”或“禁用”,可以更改小部件的状态wdiget.configure(state = 'disabled')

您的代码遇到的第一个问题是您删除了对要更改其状态的按钮小部件的唯一引用。这可以通过将.pack()方法拆分为新行来解决:

btn2 = tkinter.Button(root, text="Buy AutoClicker", 
    command=buyAutoClicker, fg="dark green", bg = "white", state = 'disabled') # also you might consider setting the initial state of the button to 'disable'
btn2.pack() # note here

至于检查计数器的值和更新按钮状态,这可以通过将回调函数附加到 tkinterIntVar()并在它发生变化时捕获它来完成:

...

def onClick(event=None):
    counter.set(counter.get() + 1)

def callback(name, index, op):
    print("called")
    if counter.get() < 15:
        btn2.configure(state = 'disabled')
    else:
        btn2.configure(state = 'normal')

counter.trace("w", callback)

tkinter.Label(root, textvariable=counter).pack()
tkinter.Label(root, textvariable=Ant).pack()

...

这将使您的按钮“购买 AutoClicker”在计数器小于 15 时处于禁用状态。如果您希望同时禁用多个按钮,则需要创建一个列表。

于 2019-05-12T09:09:25.853 回答