Как заставить кнопку tkinter взаимодействовать с моим скриптом? - PullRequest
1 голос
/ 28 мая 2019

Я новичок в кодировании и пытаюсь понять это, и я не могу, и я не могу найти ни одного видео на YouTube, которое показывает это тоже.

По сути, я хочу запустить цикл и быть в состоянии нажать кнопку, и она изменит переменную в цикле. Например:

from tkinter import *
import time

root = Tk()
x = 0

def changeVariable():
    x = x + 5

button1 = Button(root, text="add 5", command=changeVariable)
button1.pack()

while True:
    root.mainloop()
    while x > 0:
        print("X is greater than 0")
        x = x - 1
        time.sleep(1)
    else:
        print("Please click the button")
        time.sleep(1)

Я пробовал все виды вещей, и я не могу получить кнопку, чтобы изменить значение X в моем цикле while. Может кто-нибудь объяснить, как это сделать, или связать видео / руководство, которое хорошо объясняет это новичку?

Спасибо

1 Ответ

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

Вы не можете поставить код после основной петли. Вам не нужно 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...