我有一个在PyQt中编程的GUI,其中包含许多小部件和不同的窗口等。GUI的数据存储在python对象中。程序中的每个小部件都应可以访问此对象。我应该把这个物体放在哪里?
现在,我在用于程序主窗口的QMainWindow实例中拥有它。问题在于,很难从深度嵌套的小部件中访问QMainWindow对象。为此,使用QApplication实例似乎要简单得多,因为您可以使用QtCore.QCoreApplication.instance()获得它(如本答案所示)。但是,我找不到其他鼓励您更改QApplication类的示例,所以我想知道是否真的应该以这种方式使用它。
您会建议哪种方法?
正确的方法是将此数据/设置对象放在单独的模块中。然后可以将其简单地导入到任何需要的地方。理想情况下,模块(以及创建数据/设置对象的代码)应在很大程度上与应用程序的其余部分无关。
将数据/设置对象绑定到应用程序实例并没有真正的价值,因为您仍然必须导入QApplication
或qApp
访问它。同样的事情也适用于QMainWindow
-它只是将问题转移到其他位置,并增加了不必要的间接层。这种方法的另一个大问题是,只有在应用程序或主窗口的实例可用之前,才能访问数据/设置对象。通常,在应用程序各个部分的初始化过程中将需要数据/设置对象,因此将其绑定到特定的GUI元素很容易导致循环依赖或其他排序问题。
我想关键的设计原则,这里是松耦合:一旦你分离数据/设置从GUI对象,应用程序的其它部分可以访问它无论它是必需的,无论何时。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句