Как заставить кнопку на tkinter запускать функцию, которая зацикливается? - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть особая проблема: у меня есть кнопка, которая при нажатии запускает функцию, которая в основном состоит из цикла.

Вот упрощенная версия кода:

from tkinter import *
from tkinter import ttk
root = Tk()

def loop():
    while True:

        print("loop") 

b = Button (root, text = "run", command = loop)
b.grid(row = 1, column = 1)

root.mainloop()

Цикл, конечно, работает нормально.Однако, как только он начнет работать, программа не сможет продолжить и снова выполнить mainloop().Это означает, что окно tkinter перестает отвечать на запросы.В моей настоящей программе это не позволяет мне выйти из цикла и изменить функцию.

Итак, как я могу изменить код, чтобы окно tkinter снова реагировало?

1 Ответ

0 голосов
/ 05 декабря 2018

Метод tkinter, называемый after(), - это то, что вы хотите использовать здесь.

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

Приведенный ниже код сначала проверяет, доступен ли цикл с помощью кнопки, а затем в основном включается или выключается.Затем в метод after встроен цикл, чтобы продолжить цикл, пока вы снова не нажмете кнопку.

import tkinter as tk


def loop(toggle=False):
    global tracking_var
    if toggle:
        if tracking_var:
            tracking_var = False
        else:
            tracking_var = True

    if tracking_var:
        print("loop")
        root.after(1000, loop)

root = tk.Tk()
tracking_var = False
tk.Button(root, text="run", command=lambda: loop(True)).pack()

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