繁体   English   中英

销毁“顶级”窗口不会使应用程序脱离主循环

Destroying Toplevel window doesn't let the application come out of the main loop

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我是Tkinter的新手。 我正在尝试销毁“顶层”窗口,但它被完美销毁了,但是此后什么也没有运行。 游标在运行无限循环时不断在python shell中闪烁。

这是我的代码:

def error_msg(msg) :
    root1 = Tk.Toplevel()
    root1.attributes("-topmost", True)
    root1.title("Error")
    w1 = 230
    h1 = 100
    ws1 = root1.winfo_screenwidth()
    hs1 = root1.winfo_screenheight()
    x1 = (ws1/2) - (w1/2)
    y1 = (hs1/2) - (h1/2)
    root1.geometry('%dx%d+%d+%d' % (w1, h1, x1, y1))
    can1 = Tk.Canvas(root1,width = 230,height=100)
    can1.pack()
    im1 = Image.open("img.png")
    tkimage1 = ImageTk.PhotoImage(im1)
    Canvas_Image1 = can1.create_image(0,0, image=tkimage, anchor="nw")

    canvas_id1 = can1.create_text(15, 10, anchor="nw")
    can1.itemconfig(canvas_id1, text=msg)
    Tk.Button(root1, text='OK', command =root1.destroy).place(x=110,y=70)
    root1.mainloop()
    root1.quit()
    print 'lol'
    return None

error_msg("This is an error")
    print 'Help'

在此之前,我已经打开了一个Tk()窗口,因此我正在使用Toplevel()窗口。

在运行时,我会看到一个打开并显示消息的窗口。 我单击确定,一切都停止了。 “ lol”不会在外壳中打印,并且函数永远不会结束(因为未到达return语句),因此也不会打印“ Help”

知道为什么会这样吗?

谢谢,

1 个回复

对于对话框窗口,而不是创建新的mainloop ,应使用wait_window() 这将等待直到“顶级”窗口关闭,然后继续执行以下各行。

所以你应该更换

root1.mainloop()
root1.quit()

root1.wait_window()

有关创建对话框窗口的更多提示,请参阅effbot.org上的本文

2 顶级级别销毁后,在主窗口中单击条目

顶层被销毁后,为什么主窗口中的Entry不起作用? 我试图在代码中创建两个Toplevel窗口。 我遇到的问题是单击“ Entry没有响应,我无法在条目框中写一些内容。 我研究了这个问题,但找不到答案。 单击该按钮时,将显示顶层。 然后,当按下第二个按钮(在代码中调用, but在代码中)时,它无 ...

3 WPF应用程序不再显示主窗口

我的应用程序构建并运行良好。 我在任务栏中看到一个图标,显示该窗口存在,但从未显示。 我从app.xaml调用StartupUri =“ MainWindow.Xaml”,并且mainwindow仅包含一些函数和InitializeComponent()。 调试时,它将一直运行直到应该打开 ...

4 PyQtGraph 打开自己的窗口,而不是主应用程序窗口

我正在使用Qt Designer在 Python 中构建一个应用程序,它需要在主应用程序窗口中显示一个带有按钮和主程序的图形。 我正在使用 PyQtGraph 作为绘图。 这是代码: 问题 它总是在自己的窗口中打开。 如何将其设置为在我的应用程序窗口中的窗口中打开? ...

5 当销毁应用程序时,JobIntentService被销毁

作为来自Android开发人员JobIntentService在Android O或更高版本上运行时,工作将通过JobScheduler.enqueue作为作业JobScheduler.enqueue 。 在旧版本的平台上运行时,它将使用Context.startService 。 在我 ...

8 销毁Android应用程序

我开发了一个工作正常的应用程序。 我已经使用了一些静态变量并设置了应用程序级变量。 我的问题是,即使在每个活动上设置完成()后,应用程序也会以运行模式显示。 关闭应用程序后,当我在一段时间后启动应用程序时,它将设置最后的更改。 我怎么能破坏我的申请? ...

2010-08-06 07:29:03 5 16419   android
9 如何销毁angularjs应用程序?

我需要能够动态加载/卸载角度应用程序而不会导致内存泄漏。 在jQuery中你可以做$("#elementHoldingMyWidget").remove(); 并执行正确的销毁代码,事件处理程序未绑定等。 我一直无法在角度文档中找到任何内容,一旦它被引导就可能会删除应用程序。 我 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM