如何在Pyqt中正确设置小部件的父级?

5
我有以下代码。
from PyQt5 import QtCore, QtGui, QtWidgets
from mw import Ui_MainWindow as mwin
from wd import Ui_Form as wdg

class widget(QtWidgets.QWidget):
    def __init__(self,parent = None):
            super(widget,self).__init__(parent)
            self.ui = wdg()
            self.ui.setupUi(self)
            self.show()

class Main(QtWidgets.QMainWindow):
    def __init__(self,parent = None):
        super(Main,self).__init__(parent)
        self.ui = mwin()
        self.ui.setupUi(self)
        self.show()
        w = widget(self)
import sys
if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        mn = Main()
        sys.exit(app.exec_())

Ui是由qt designer生成并从另一个文件导入的。

当我运行代码时,主窗口和小部件合并在一起,关闭主窗口时会出现分段错误。

当我将小部件中的父级设置为无时问题消失了,但小部件没有父级。

我无法理解哪里出错了,以及如何正确地将主窗口设置为小部件的父级?


1
在类构造函数中不应使用show()。在启动QApplication之前,请将它们删除并调用mn.show()。 - Guillaume A.
你能同时添加mwin和wdg代码吗? - Nimish Bansal
1个回答

0

这可能不是正确的方法,但可以解决问题。

解决方法:

class widget(QtWidgets.QWidget):
    def __init__(self,parent = None):
        super(widget,self).__init__()
        self.ui = wdg()
        self.ui.setupUi(self)

        self.parent = parent

        self.show()


class Main(QtWidgets.QMainWindow):
    def __init__(self,parent = None):
    super(Main,self).__init__(parent)
    self.ui = mwin()
    self.ui.setupUi(self)
    self.show()
    w = widget(self)

然后使用self.parent


整个想法是只运行.show()一次,而不是多次。 - ZF007
1
@Ujjwal 一份高质量的答案需要有解释。请解释一下建议是什么。 - Robert Andrzejuk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接