PySide PyQt的主窗口或中央物件从深度嵌套小部件访问(PySide PyQt MainWin

2019-09-30 07:15发布

呼唤PyQt的大师们的一些最佳实践。

我有我定义为我的QApplication属性的一些应用程序的通用属性。 在我的主窗口初始化我分配一个“应用程序”属性的主窗口。 我想访问深度嵌套小部件应用程序的变量。 现在,我可以通过调用足够这么做“父()”调用起床主窗口的水平。

这似乎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有什么关系解决此类问题。

Answer 1:

你总是可以通过获取到当前应用程序实例PySide.QtCore.QCoreApplication.instance() 在C ++中,全局qApp变量提供相同的功能。

所以,不管你设置蟒蛇属性或Qt的属性,在全球应用实例,你总是可以得到它,而不必经过任何层次结构。



文章来源: PySide PyQt MainWindow or Central Widget access from deeply nested widgets