исправить мой код для работы с отключением кнопок - PullRequest
0 голосов
/ 12 мая 2019

как отключить все кнопки покупки, прикрепив их к операторам 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)

1 Ответ

1 голос
/ 12 мая 2019

Метод configure позволяет изменить параметры виджета, а доступные параметры зависят от настраиваемого виджета.Состояние виджета можно изменить, вызвав параметр состояния и установив его значения как «нормальный» или «отключенный»: 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

Что касается проверки значения счетчика и обновления состояния кнопок, это можно сделать, подключив функцию обратного вызова к tkinters IntVar()и поймать его, когда он изменится:

...

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

...

Это будет держать вашу кнопку «Купить автокликер» отключенной, когда счетчик меньше 15. Если вы хотите, чтобы несколько кнопок были отключены одновременно, вы собираетесьнужно создать список.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...