2017-12-04 2 views
1

MainWindow에서 변수 및 함수에 액세스해야하는 QMainWindow에서 사용자 정의 위젯 클래스 (PyQT 5.9)가 하위로 있습니다. 나는 상상적으로 self.test라고 불리는 테스트 변수로 설정합니다. . 내가 자식 클래스() 테스트 self.parent를 사용하는 경우 그러나, 나는 얻을 오류 :PyQT의 QWidget에서 parent()를 호출하면 NoneType이됩니다.

File "D:/test.py", line 390, in mainWin = MainWindow()

File "D:/test.py", line 158, in init self.leftPane = FastaAnalysisWidget('left')

File "D:/test.py", line 26, in init print(self.parent().test)

AttributeError: 'NoneType' object has no attribute '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를 시작하기 전에 파이썬에서 부모 - 자식 관계를 가지고 놀지 않았습니다. 내가 여기에 사용하는 코드는 탭이 별도의 클래스 인 QTabWidget을 사용하여 성공적으로 사용한 초기화입니다. 나는 명백한 것을 놓치고 있는가?

답변

1

을 만들면 기본값 인 None의 부모 인수가 생략되므로 코드는 사용자가 지정한대로 정확하게 수행합니다.

당신은 MainWindow 클래스에서 다음과 같이 초기화해야합니다

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

그런 부모 올바르게 MainWindow를 가리 킵니다.

+0

이제 알겠지만 분명합니다. 그런데 또 다른 코드가 다른 프로젝트에서 작동했습니다. (다른 사람들의 제안에서도 얻었습니다.) 필자는 기회가 생기면 파이썬 도움말 페이지에서이 주제를 읽도록 노력할 것이다. 초심자의 무지를 진심으로 사과드립니다. – Nanobody