setParent的PyQt5行为显示没有布局的QWidget

时间:2018-03-07 15:09:39

标签: python pyqt5

我的一个小项目使用PyQt5存在一个小问题。我尝试将随机QWidget(在此示例中为QPushbutton)添加到自定义QWidget。但是,我不理解“setParent”函数的行为。当我在自定义QWidget之外使用它时,会显示QPushButton。当我在自定义Widget的声明函数中使用它时,QPushButton被遮挡,我没有机会在添加布局(我不想要)之外显示它。这是源代码的一个例子:

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class customWidget(QWidget):

    def __init__(self):
        super().__init__()
        self.addButton()

    def addButton(self):

        button = QPushButton('not_showing')
        button.setParent(self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = QWidget()

    button = QPushButton('showing')
    button.setParent(w)

    button.move(50,50)
    w.resize(600,600)
    w.move(1000,300)
    w.setWindowTitle('Simple')
    w.show()

    sys.exit(app.exec_())

在QPushButton初始化期间添加父项时没有变化。

1 个答案:

答案 0 :(得分:-1)

当函数addButton退出时,该按钮被删除。

如果您想看按钮,请尝试:

Point{p} In Surface {q};

主函数中没有此问题,因为在应用程序停止之前,此函数不会返回。

编辑:评论是对的,但你也错过了一些论点。这将有效

class customWidget(QWidget):

def __init__(self):
    super().__init__()
    self.addButton()
    self.button = None

def addButton(self):
    if self.button is None:
       self.button = QPushButton('not_showing')
       self.button.setParent(self)