Вы не можете поставить код после основной петли. Вам не нужно root.mainloop
, поскольку в вашем коде уже есть вечный цикл. Вы можете просто удалить root.mainloop
и ваш код должен работать.
Редактировать: Другая проблема заключается в том, что х не определен глобально. В начале функции changeVariable
добавьте код global x
.
Последняя проблема в том, что вы используете time.sleep()
. Вы не хотите использовать time.sleep
, так как кнопка может быть нажата, пока все заморожено. См. Правку 2 для исправления.
Редактировать 2:
Вы можете использовать метод tkinter after
. Метод after
можно применять к любому объекту tkinter. В этом случае мы применим его к корню. Это основной синтаксис: root.after(milliseconds, function_to_execute_after_wait)
. Функция для выполнения не является обязательной. В вашем случае вместо time.sleep(1)
вы должны использовать root.after(1000)
. Обязательно добавьте root.update()
после вашего root.after(1000)
.
Вы также можете использовать +=
или -=
для изменения переменных. Вместо x = x + 5
вы можете использовать x += 5
. Вместо x = x - 1
вы можете использовать x -= 1
.
Итоговый код :
from tkinter import *
root = Tk()
x = 0
def changeVariable():
global x
x += 5
button1 = Button(root, text="add 5", command=changeVariable)
button1.pack()
while True:
while x > 0:
print("X is greater than 0")
x -= 1
root.after(1000)
root.update()
else:
print("Please click the button")
root.after(1000)
root.update()