访问PyQt应用程序中的公共数据对象

时间:2017-12-07 08:18:55

标签: python pyqt qmainwindow qapplication

我在PyQt中编写了一个GUI,其中包含许多小部件和不同的窗口等.GUI的数据存储在python对象中。应该可以从程序中的每个窗口小部件访问此对象。我应该把这个物体放在哪里?

现在我在用于程序主窗口的QMainWindow实例中有它。问题是很难从深度嵌套的小部件到达QMainWindow对象。使用QApplication实例似乎更简单,因为您可以使用QtCore.QCoreApplication.instance()获取它(如此answer所示)。但是,我找不到任何其他鼓励你改变QApplication类的例子,所以我想知道它是否应该以这种方式使用。

您会建议采用什么方法?

1 个答案:

答案 0 :(得分:1)

正确的方法是将此数据/设置对象放在单独的模块中。然后可以在需要的地方简单地导入它。理想情况下,模块(以及创建数据/设置对象的代码)应该在很大程度上独立于应用程序的其余部分。

将数据/设置对象绑定到应用程序实例没有实际价值,因为您仍然需要导入QApplicationqApp才能访问它。同样的事情适用于QMainWindow - 它只是将问题移到另一个位置,并添加了一个不必要的间接层。这种方法的另一个大问题是,在应用程序或主窗口的实例变得可用之前,无法访问数据/设置对象。通常,在应用程序的各个部分初始化期间将需要数据/设置对象,因此将其绑定到特定的GUI元素很容易导致循环依赖或其他排序问题。

我认为这里的关键设计原则是Loose Coupling:一旦您将数据/设置对象与GUI分离,应用程序的其余部分就可以随时随地访问它。