#python #tkinter
#python #tkinter
Вопрос:
Я пытаюсь показать, скрыть и показать холст. Холст даже не появляется при запуске программы и, похоже, застревает в цикле.
import tkinter as tk
import time
class Test():
def __init__(self):
self.root = tk.Tk()
self.canvas = tk.Canvas(self.root, bg="black", width=550, height=820)
def main(self):
time.sleep(2)
self.canvas.pack()
time.sleep(2)
self.canvas.pack_forget()
time.sleep(2)
self.canvas.pack()
self.root.mainloop()
a = Test()
a.main()
Комментарии:
1. Простой способ — добавление
self.root.update()
перед каждымtime.sleep(2)
. Лучший способ — провести рефакторинг вашего кода с помощью.after()
.2. Спасибо, что все сработало хорошо, что вы подразумеваете под рефакторингом?
3. Аналогично перепроектированию.
Ответ №1:
Я вижу здесь некоторые проблемы
- Вы должны использовать метод mainloop внутри
__init__
функции - Вы должны обновить свои elements (
.update()
), чтобы заставить его работать - Вы просто не можете создавать подобные события
- Не использовать
sleep
функцию, используя.after
метод, немного лучше в tkinter
Я изменил ваш код примерно так:
import tkinter as tk
class Test():
def __init__(self):
self.root = tk.Tk()
self.canvas = tk.Canvas(self.root, bg='black', width=550, height=820)
self.btn = tk.Button(self.root,text='main func',command=self.main)
self.btn.pack()
self.root.mainloop()
def main(self):
self.root.after(2000)
self.canvas.pack()
self.canvas.update()
self.root.after(2000)
self.canvas.pack_forget()
self.canvas.update()
self.root.after(2000)
self.canvas.pack()
self.canvas.update()
a = Test()
Как вы можете видеть, я добавил кнопку для запуска события для меня.
Попробуйте найти момент в вашей программе, когда может произойти событие. Например: я нажимаю кнопку, чтобы сгенерировать несколько строк. Он также выполняет основную функцию.
Надеюсь, я вам достаточно помог