위젯을 PyQt5 응용 프로그램에 추가 할 때 이상한 문제가 있습니다.PyQt 위젯이 부모를 "잊어 버린 것 같습니다"
class OllRoot(preferences.Group):
"""Basic openLilyLib installation"""
def __init__(self, page):
super(OllRoot, self).__init__(page)
self.setParent(page)
self.changedRoot()
layout = QGridLayout()
self.setLayout(layout)
self.directory = widgets.urlrequester.UrlRequester()
self.directory.changed.connect(self.changedRoot)
layout.addWidget(self.directory, 0, 1)
def changedRoot(self):
print("Self:", self)
print("Parent:", self.parent())
self.parent().changed.emit()
# TODO: Check for proper openLilyLib installation
생성자가 호출
, parent()
가 제대로 전달 된 객체로 설정됩니다
다음 (translateUI 등) 관련 없어 보이는 모든 것을 벗겨 실제 코드입니다 안에는 page
으로 표시되므로 두 개의 적절한 객체가 인쇄됩니다.
Self: <preferences.openlilylib.OllRoot object at 0x7f855a1de288>
Parent: <PyQt5.QtWidgets.QWidget object at 0x7f855a1dbc18>
질문 : (내가 그것을 연결 한대로)를 다시 호출되는 self.directory
위젯 changedRoot
의 변경을 할 때
Self: <preferences.openlilylib.OllRoot object at 0x7f855a1de288>
Parent: <preferences.openlilylib.OpenLilyLibPrefs object at 0x7f855a1bcb88>
그러나,하지만 지금은 부모가 사라진 것 같습니다 :
setParent
에 문제가 있습니까?connect
에 문제가 있습니까?- 개체가 어떻게 든 부모를 "잊어 버렸습니까?"
추신 : 모델로 제공되는 유사한 파일은 https://github.com/wbsoft/frescobaldi/blob/master/frescobaldi_app/preferences/general.py#L56에서 찾을 수 있습니다.
설명해 주셔서 감사합니다. 나는'__init__' 메소드에 새로운'page' 속성을 추가하여 상황을 해결했습니다. Qt의 처리에 의해 하이재킹되지 않습니다. –