在 GUI 应用程序中,哪个功能应该处于主导地位?

Which Function Should be in the Driver's Seat on a GUI Application?

我是一名电气工程师,正在构建一个 Python 应用程序以与 PSS/E(PTI 西门子的工程师电力系统仿真)进行交互。代码当前的工作方式是,该程序包含一个主要方法,该方法调用我编写的两个 类(在单独的文件中)的方法。在程序的不同步骤中,用户通过终端与其交互(输入文件路径,按回车键继续等)。

我正在使用 Tkinter 实现 GUI。用户将浏览到 select 几个文件,select 某些选项,然后按 'Start'。然后,用户将在程序的不同步骤与 GUI 交互,而不是在终端中键入。

在该程序中实现 GUI 的理念是什么?我在想,一方面,我可以有一个 GUI 文件,从这个文件启动程序,然后在用户按下 'start' 时调用 main 方法。来自用户的 options/file 路径将作为参数传递给 main 方法。另一方面,我正在考虑将 GUI 集成到我的主要方法中。为 Tkinter 小部件创建一个带有 class/methods 的单独文件,并根据需要从 main 中调用它们。其中哪一个(如果有的话)是最好的方法,为什么?我还有一个关于如何处理 Python 2.7 在 2020 年 1 月成为 'retired' 的问题,因为我的代码依赖于版本 2.7。我将在另一个问题中提出这个问题,以便对这个 GUI 问题进行一些详细说明。预先感谢您的意见。

虽然可以将 GUI 程序编写为终端程序的直接端口,如您所描述的那样工作,但主程序驱动与用户交互的流程,大多数 GUI 程序编写为一组事件处理程序,也称为回调函数。因为事件循环正在使用您提供给它的处理程序回调您。

通常主程序只是声明您的控件,将它们绑定到处理程序,然后启动事件处理循环。

有多种组织此类程序的方法,这在很大程度上取决于您的工作流程。

但是事件处理函数通常驱动整体逻辑,而不是主程序。这允许用户以不太线性的方式与您的程序交互。

分离事件处理逻辑并创建一个 'model' 来表示与 GUI 无关的程序和逻辑状态通常很有用。然后事件处理程序将调用模型的函数或方法来更改程序的状态。