向PyQt专家征集一些最佳实践。
我有一些应用程序通用属性,我在QApplication上定义为属性。在我的MainWindow初始化中,我为MainWindow分配了一个“app”属性。我想在深层嵌套的小部件中访问应用程序的变量。现在,我可以通过调用足够的“parent()”调用来达到MainWindow的水平。
这看起来像kludgey,我的猜测是在这种情况下还有另一种解决方案是最佳实践。以下是一些代码片段,可以更好地理解这个问题。
申请类
class App(QtGui.QApplication):
def __init__(self, sim, *args, **kwargs):
super(App, self).__init__(*args, **kwargs)
self.sim = sim
window = MW.BaseUI(digi_thread, app=self)
主窗口类
class BaseUI(QtGui.QMainWindow):
def __init__(self, digi_thread, app, parent=None):
super(BaseUI, self).__init__(parent)
self.app = app
从嵌套小部件(tabbook中的选项卡)到达主窗口的一些代码示例
@property
def main_window(self):
return self.parent().parent().parent().parent()
def some_function(self):
if self.main_window.app.sim:
print "in simulation mode"
我也不确定centralWidget是否与解决此类问题有关。
答案 0 :(得分:8)
您始终可以通过PySide.QtCore.QCoreApplication.instance()
访问当前的应用程序实例。在C ++中,全局qApp
变量提供相同的功能。
因此,无论是在全局应用程序实例上设置python属性还是Qt属性,都可以随时访问它而无需经过任何层次结构。