在PyQT中从QWidget调用parent()导致NoneType

时间:2017-12-04 14:05:13

标签: python-3.x pyqt5

我有一个自定义窗口小部件类(在PyQT 5.9中)作为QMainWindow中的子窗口,需要从MainWindow访问变量和函数。我用一个名为self.test的测试变量来设置它。但是,当我在子类中使用self.parent()。test时,我得到并且错误:

  

文件“D:/test.py”,第390行,在mainWin = MainWindow()

     

文件“D:/test.py”,第158行,在 init self.leftPane = FastaAnalysisWidget('left')

     

文件“D:/test.py”,第26行, init 打印(self.parent()。test)

     

AttributeError:'NoneType'对象没有属性'test'

这是简化的子类:

class FastaAnalysisWidget(QWidget):
    def __init__(self, name, parent=None):
        super(FastaAnalysisWidget, self).__init__(parent)
        print(self.parent().test)

这是简化的父MainWindow:

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.test = 'blabla'
        self.leftPane = FastaAnalysisWidget('left')

主要看起来像这样:

app = QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())

我对PyQT很陌生,在开始PyQT之前,我没有在Python中使用父子关系。我在这里使用的代码用于我以前成功使用的QTabWidget,其中选项卡是单独的类。我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:1)

当您创建FastaAnalysisWidget时,您省略了父参数,默认为None,因此代码完全按照您的说法执行。

您需要在MainWindow类中对此进行初始化:

self.leftPane = FastaAnalysisWidget('left', parent=self)

然后,父正确指向MainWindow。