我有一个自定义窗口小部件类(在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,其中选项卡是单独的类。我错过了一些明显的东西吗?
答案 0 :(得分:1)
当您创建FastaAnalysisWidget
时,您省略了父参数,默认为None
,因此代码完全按照您的说法执行。
您需要在MainWindow
类中对此进行初始化:
self.leftPane = FastaAnalysisWidget('left', parent=self)
然后,父正确指向MainWindow。