【发布时间】:2015-09-27 17:29:43
【问题描述】:
我正在编写一个程序来读取和修改包含有关某些图像的信息的二进制文件:但是为了能够做到这一点,它还需要用户提供一些信息,假设这些图像所在的文件夹很少选择。
通过对网络的快速研究,我发现创建 GUI 的一种简单方法是 Tkinter,事实上我很快就达到了我的目标。
特别是我使用了tkFileDialog 和tkMessageBox 模块,而无需调用mainloop 函数,只要我想在屏幕上显示一些东西就创建和销毁一个窗口:我认为这不是正确的方法,但它非常适合我的应用程序,因为通过这种方式,我能够在需要与用户“交谈”之前让程序保持原样,而无需使用纯面向对象的结构来重构它,例如“真正的”GUI。
当我想改进此界面并使用 按钮 小部件以提供在三个选项中进行选择的可能性时出现了问题:在这种情况下,mainloop 似乎是强制性的..
所以问题来了:是否存在一种无需将所有函数都放入 GUI 类且不使用无限循环即可与用户交流的策略? (我认为使用 Tkinter 的答案是否定的) 在这种混合情况下,最好的方法是什么?
【问题讨论】:
-
运行一个无限的“事件循环”基本上是 GUI 应用程序的运行方式,一旦它退出应用程序就会关闭。所以不,你不能避免主循环,尝试没有意义。
-
@AcidReign:不一定。例如,在 Windows 上,你当然可以做一些非 UI 工作,呈现一个窗口并运行一个消息循环,让消息循环终止并做更多非 UI 工作,然后呈现另一个窗口并运行另一个消息循环……在 Windows 上,通常模式对话框也是通过嵌套的消息循环实现的,所以它真的不像你建议的那么简单。
-
好吧,如果你想学究气(j/k),我承认你当然可以运行一个有限/显式的阻塞调用序列,显示对话框并等待响应,因为你建议。但这将是一个相当基本/无趣的 GUI
-
@ReblochonMasque:谢谢你的建议,我几乎阅读了所有关于如何构建 Tkinter 项目的 stackoverflow 问题,但不是那个。无论如何,我认为在我的情况下,GUI 不那么重要,而不是该示例中的核心。对我来说奇怪的是(并且 AcidReign 证实了这一点)是没有讨论过有一个应用程序的生命与他的 GUI 部分没有严格相关的应用程序,而以我为例,GUI 部分只是其中的一小部分总任务..
标签: python user-interface tkinter