Итак, у меня были проблемы с Tkinter для Python 3 на MacOS 10.15.5. Вот воспроизводимый код для моей системы:
import tkinter as tk
import tkinter.messagebox as msgbox
def quit():
root.destroy()
root = tk.Tk()
lbl = tk.Label(root,text="This is a label.")
ent = tk.Entry(root)
btn = tk.Button(root,text="Quit", command=quit)
lbl.pack()
ent.pack()
btn.pack()
root.mainloop()
for i in range(800000):
print(i)
После того, как я нажму «выйти», for l oop работает в фоновом режиме, но окно Tkinter зависает (с вращающимся колесом) до тех пор, пока for l oop заключает. Я пытаюсь создать программу, которая вначале принимает вводимые пользователем данные, а затем запускает код в фоновом режиме, чтобы вы могли понять, почему я бы предпочел не замораживать GUI на все время.
Я запускаю этот код с терминала, но у меня такая же проблема возникает при использовании IDLE. Я попытался удалить и переустановить несколько разных версий python (с веб-сайта python, поскольку, по-видимому, это способ правильно использовать Tk), и эта проблема сохраняется.
Как ни странно, я видел, что добавление оператора input вместо любого другого кода сразу после mainloop
приводит к закрытию окна, но я не могу выяснить почему, и это не будет работать с моей более широкой программой.