【发布时间】:2015-05-28 16:02:01
【问题描述】:
我正在重写我的一个 Tkinter 程序,我想将逻辑和 UI 分成两个不同的文件:main.py、ui.py
在 main 中,我们有一个类 MainApp(),它处理程序的所有核心功能。
在 ui 中,我们有一个类 BaseApp(),它负责渲染 UI 并执行所有这些操作。
我有BaseApp() 是MainApp() 的孩子,像这样:
main.py
class MainApp():
def __init__(self):
#some code here
ui.py
import main
class BaseApp(main.MainApp):
def __init__(self):
main.MainApp.__init__(self)
#render UI here e.g...
mybtn = tkinter.Button(self.root, text="Hey StackOverflow", command=main.myFunction)
这一切都很好。我在制作这个系统方面走了很长一段路,没有任何问题……然后我遇到了一个问题。
我希望能够从 main 调用 UI 代码。我需要main 模块中的MainApp() 类中的函数,以便能够显示弹出窗口并创建在ui 模块中的类中定义的Toplevel 窗口。
如果 MainApp() 派生自 BaseApp() 则我可以显示弹出窗口,但 UI 无法访问任何主要功能。如果 BaseApp() 如上所述从 MainApp() 派生,则 UI 可以访问逻辑,但我无法创建任何窗口,例如ui.ProgressWindow, ui.Alert 需要时来自 main 模块。
【问题讨论】:
-
这是一个循环导入依赖。简而言之,你可以做一些“聪明”的事情来绕过它们。但你真的不应该。它使代码更加混乱,您应该真正评估为什么将类拆分为单独的文件以及是否应该将它们重新组合在一起。