Python 关闭Tkinter窗口并自动返回控制流

Python 关闭Tkinter窗口并自动返回控制流,python,window,tkinter,destroy,quit,Python,Window,Tkinter,Destroy,Quit,我有一个调用这个类的drawWorld()函数的外部脚本。 我希望图形显示1-2秒,然后关闭,控件返回主脚本。 我能设法让窗户随行消失 root.after(1000, lambda: root.destroy()) 但我无法将流返回到主脚本。 我试过了 但它不起作用 这是我的Tkinter类代码: from Tkinter import Tk, Canvas, Frame, BOTH class World(Frame): def __init__(self, parent):

我有一个调用这个类的drawWorld()函数的外部脚本。 我希望图形显示1-2秒,然后关闭,控件返回主脚本。 我能设法让窗户随行消失

root.after(1000, lambda: root.destroy())
但我无法将流返回到主脚本。 我试过了

但它不起作用

这是我的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() 

在对您的问题的评论中,您写道您的主要程序如下:

import tkWorld
tkWorld.drawWorld()
print "end"
当我在程序中使用它,并使用您的示例代码(在修复缩进之后),它工作得很好。我看到窗口出现了一秒钟,它消失了,我在控制台上发送打印的“结束”

无论lambda调用
root.quit()
还是
root.destroy()
,它都能工作


“我不能将流程返回到主脚本”和“但它不工作”是什么意思?它会崩溃吗?程序挂起了吗?你收到错误信息了吗?能否提供一个说明完整问题的最小脚本—调用此函数并在函数退出时尝试继续的过程代码?主脚本调用drawWorld()函数,因此控制流转移到代码的这一部分。我使用root.destroy()删除窗口,它可以正常工作,而应该退出tk环境(并让脚本的其余部分运行)的root.quit()则不能。很抱歉没有具体说明,但我的意思是不工作=不辞职。基本上,它一直保持打开状态,直到我手动退出(Ctrl-C)。我的外部代码很简单:
import tkWorld tkWorld.drawWorld();打印“结束”
我无法到达打印行。我希望tk窗口弹出,并在1s后消失。在您的示例中,您的缩进不正确。谢谢您,Bryan,我在另一台机器上尝试了它,它工作正常。我现在有点担心我的问题是什么。无论如何谢谢你!!
import tkWorld
tkWorld.drawWorld()
print "end"
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() 

if __name__ == "__main__":
    import tkWorld
    tkWorld.drawWorld()
    print "end"