Pyside Pyqt MainWindow或中央小部件从深处嵌套的小部件访问



呼唤Pyqt Gurus以获取一些最佳实践。

我有一些我在qapplication上定义为属性的通用属性。在我的MainWindow初始化中,我将"应用程序"属性分配给MainWindow。我想在深度嵌套的小部件中访问应用程序的变量。现在,我可以通过致电足够的" 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

一些代码的示例,可以从嵌套的小部件(选项卡中的一个选项卡)启动主窗口

@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是否与解决此类问题有关。

您始终可以通过PySide.QtCore.QCoreApplication.instance()到达当前的应用程序实例。在C 中,全局qApp变量提供了相同的功能。

因此,无论您是在全局应用程序实例上设置Python属性还是QT属性,您可以随时无需浏览任何层次结构。

最新更新