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

时间:2017-01-24 15:19:03

标签: python qt pyqt qt-designer

我有以下代码

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 个答案:

答案 0 :(得分: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