Python 从PyQt5中的.ui文件导入自定义小部件

Python 从PyQt5中的.ui文件导入自定义小部件,python,qt-creator,pyqt5,pyuic,Python,Qt Creator,Pyqt5,Pyuic,我想通过直接导入.ui文件来使用使用QtCreator创建的自定义小部件。 当前,当我使用pyuic5创建.py文件时,我的代码工作正常。但是我希望能够直接从.ui文件导入我的小部件。 部分工作代码: main.py import MyWidget MainWindowUI, MainWindowBase = uic.loadUiType('main.ui') class mainGUIWindow(MainWindowUI, MainWindowBase): def __init

我想通过直接导入.ui文件来使用使用QtCreator创建的自定义小部件。 当前,当我使用
pyuic5
创建.py文件时,我的代码工作正常。但是我希望能够直接从.ui文件导入我的小部件。 部分工作代码:

main.py

import MyWidget

MainWindowUI, MainWindowBase = uic.loadUiType('main.ui')

class mainGUIWindow(MainWindowUI, MainWindowBase):
     def __init__(self, mainWindow):
         QtWidgets.QMainWindow.__init__(self)
         self.setupUi(self)

         self.myWidget = MyWidget.Ui_Form()
         self.myWidget.setupUi(self)
class mainGUIWindow(MainWindowUI, MainWindowBase):
    def __init__(self, mainWindow):
        QtWidgets.QMainWindow.__init__(self)
        self.setupUi(self) # contains a QFrame called 'frame'

        # Creation of myWidget
        self.wid = myWidget()

        # Adding myWidget to a layout
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(self.wid)
        self.frame.setLayout(hbox)


class myWidget(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        uic.loadUi('MyWidget.ui', self)
MyWidget.py(通过
pyuic5-x MyWidget.ui-o MyWidget.py生成)

有没有办法使用
LoadUi()
或类似的方法来避免使用
pyuic
?到目前为止,我所尝试的:

main.py

import MyWidget

MainWindowUI, MainWindowBase = uic.loadUiType('main.ui')

class mainGUIWindow(MainWindowUI, MainWindowBase):
     def __init__(self, mainWindow):
         QtWidgets.QMainWindow.__init__(self)
         self.setupUi(self)

         self.myWidget = MyWidget.Ui_Form()
         self.myWidget.setupUi(self)
class mainGUIWindow(MainWindowUI, MainWindowBase):
    def __init__(self, mainWindow):
        QtWidgets.QMainWindow.__init__(self)
        self.setupUi(self) # contains a QFrame called 'frame'

        # Creation of myWidget
        self.wid = myWidget()

        # Adding myWidget to a layout
        hbox = QtWidgets.QHBoxLayout()
        hbox.addWidget(self.wid)
        self.frame.setLayout(hbox)


class myWidget(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        uic.loadUi('MyWidget.ui', self)
当我尝试将我的小部件添加到主窗口中的布局时,出现以下错误:

QWidget::setLayout:正在尝试在QFrame“frame”上设置QLayout“”, 它已经有了一个布局


我找到了解决这个问题的方法,即使它对我来说并不理想,但我认为它可以帮助其他人。 我必须创建一个继承
PyQt5.qtwidts.QWidget
的新类。在这个小部件的
\uuuu init\uuuuu()
期间,调用
loadUi()
函数来捕获widget.ui文件

class mainGUIWindow(MainWindowUI, MainWindowBase):
    def __init__(self, mainWindow):
        QtWidgets.QMainWindow.__init__(self)
        self.setupUi(self)

        wid = myWidget()

        self.grid = QtWidgets.QGridLayout()
        self.grid.addWidget(wid,0,0)
        self.frame.setLayout(self.grid)


class myWidget(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)
        uic.loadUi('Widget1.ui', self)

看看这个:他们使用PyQt4,但在PyQT5中也是一样。我编辑了我的帖子,展示了我的尝试。我可以在main.py文件中创建一个Widget类,但无法将其正确添加到主窗口中。请在此处查找新错误(这似乎与您的第一个问题无关):