【发布时间】:2018-03-26 13:52:05
【问题描述】:
我遇到的问题是我似乎陷入了无限循环,(如果不是,请纠正我)。我在 Windows 10 上将 tkinter 用于 python 3.6(64 位)。
在模块中,我遇到了一个问题,我有 3 个条目小部件和 2 个按钮。两个按钮都调用“destroy()”函数来杀死父窗口。
下面是我的模块的高度抽象版本,模块的目的是从入口小部件中获取输入并将它们写入文件。
def Create():
parent = Tk()
parent.MakeItlookNice
entry1 = Entry(parent)
entry1.insert(INSERT, "Please enter your desired username here")
entry2 = Entry(parent)
entry2.insert(INSERT, "Please enter your desired password here")
entry3 = Entry(parent)
entry3.insert(INSERT, "What is your mother's maiden name")
Submit = tk.Button(parent,
text ="Click here to submit your stuff",
command = lambda: [parent.destroy(),
submit.function()])
Cancel = tk.Button(parent,
text ="Click here to cancel your request",
command = lambda: parent.destroy())
parent.mainloop()
此功能包含在“RegisterNewUser”模块中。 “菜单”模块是调用此函数的模块。据我所知,一旦调用了 parent.destroy(),就没有更多的代码可以执行,因为它都包含在 parent.mainloop() 中,因此该函数已完成,“菜单”模块应继续执行。
应该发生什么:
- 我希望提交按钮破坏窗口,执行功能,然后返回“菜单”模块。
- 我希望取消按钮破坏窗口并返回“菜单”模块。
实际发生了什么:
- 窗口按原样关闭
- 但是“菜单”模块内的代码没有再次开始执行
- 当我关闭 python shell 时,它警告我程序仍在运行
最后我的问题是,什么代码仍在运行,为什么它没有停止?
感谢您阅读本文,如果您需要更多详细信息,请告诉我。
编辑:在发布此问题之前,我已经对此主题进行了研究。我已经阅读了关于 tk.destroy() 函数和 tk.mainloop() 函数的文档,我还在 IDLE 中打开了 Tkinter 模块,以尝试更深入地了解发生了什么,但毕竟,我是仍然无法找出解决方案。这是我关于堆栈溢出的第一个问题,如果我做错了什么,请原谅我。
【问题讨论】:
-
我认为当你关闭父级时,主循环正在运行。可能会出现窗口,但 python 仍在运行。
-
嗨迈克尔,我认为 parent.destroy 会结束主循环中的所有进程。如果父窗口被销毁但主循环仍在运行,我该如何结束主循环。
-
试试
exit(0)。退出程序 -
见下面我的回答;就我而言,你没有做错任何事
-
不幸的是杀死了整个程序,我只想销毁父窗口并返回调用该函数的“菜单”模块
标签: python-3.x tkinter