【发布时间】:2017-10-21 00:21:42
【问题描述】:
向 PyQt5 应用程序添加小部件时遇到一个奇怪的问题。
以下是实际代码,去掉了所有看似无关的内容(如 translateUI):
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()被正确地设置为已经作为page传入的对象,所以两个正确的对象被打印出来了。
Self: <preferences.openlilylib.OllRoot object at 0x7f855a1de288>
Parent: <preferences.openlilylib.OpenLilyLibPrefs object at 0x7f855a1bcb88>
但是,当我在 self.directory 小部件中进行更改时,changedRoot 再次被调用(因为我已经连接了它),但现在父级似乎已经消失了:
Self: <preferences.openlilylib.OllRoot object at 0x7f855a1de288>
Parent: <PyQt5.QtWidgets.QWidget object at 0x7f855a1dbc18>
问题:
-
setParent有什么问题吗? -
connect是不是我做错了什么? - 对象会以某种方式“忘记”其父对象吗?
PS:可在此处找到用作模型的可比较文件:https://github.com/wbsoft/frescobaldi/blob/master/frescobaldi_app/preferences/general.py#L56。
【问题讨论】:
标签: python layout pyqt parent-child pyqt5