У меня есть внешний скрипт, который вызывает функцию drawWorld() этого класса. Я хочу, чтобы рисунок показывался в течение 1-2 секунд, а затем, чтобы закрыть, и элемент управления вернется к основному сценарию. я могу управлять, чтобы окно исчезнет с линиейОкно Tkinter закрывается и поток управления автоматически возвращается
root.after(1000, lambda: root.destroy())
, но я не могу вернуть поток к основному сценарию. Я попытался
root.after(1000, lambda: root.quit())
, но он не работает.
Это мой код для класса Tkinter:
from Tkinter import Tk, Canvas, Frame, BOTH
class World(Frame):
def __init__(self, parent):
Frame.__init__(self, parent)
self.parent = parent
self.parent.title("CliffWorld")
self.pack(fill=BOTH, expand=1)
canvas = Canvas(self)
canvas.create_rectangle(4, 4, 31, 31,
outline="#f11", fill="#1f1", width=1)
canvas.pack(fill=BOTH, expand=1)
def drawWorld():
root = Tk()
ex = World(root)
root.geometry("330x220+300+300")
root.after(1000, lambda: root.destroy())
root.after(1000, lambda: root.quit())
root.mainloop()
Что «Я не могу вернуть поток к главному сценарию» и «но это не сработает». имею в виду? Это крушение? Программа зависает? Вы получаете сообщения об ошибках? Можете ли вы предоставить минимальный сценарий, который иллюстрирует полную проблему - процедурный код, который вызывает эту функцию, а затем пытается продолжить, когда функция завершается? –
Главный сценарий вызывает функцию drawWorld(), поэтому поток управления смещается в эту часть кода. Я использовал root.destroy(), чтобы удалить окно, и оно работает, в то время как root.quit(), который должен покинуть среду tk (и пусть остальная часть скрипта работает), не работает. Прошу прощения за то, что не указал, но я имел в виду, что не работает = не уходит. В основном он остается открытым, пока я не выйду из него вручную (Ctrl-C). Мой внешний код прост: 'import tkWorld tkWorld.drawWorld(); print "end" ' Я не могу добраться до линии печати. Я хочу, чтобы окно tk всплывало и умирало после 1 секунды. – Alvin
Ваш отступ неверен в вашем примере. –