首页 文章

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

提问于
浏览
0

我想通过直接导入.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)

MyWidget.py(通过 pyuic5 -x MyWidget.ui -o MyWidget.py 生成)

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(271, 201)
        # The rest of the widget is down here

有没有办法使用 LoadUi() 或类似的东西来避免使用 pyuic ?到目前为止我尝试了什么:

main.py

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“”,它已经有了一个布局

1 回答

  • 0

    我找到了这个问题的解决方案,即使它不适合我,我认为它可以帮助别人 . 我必须在这个小部件的 __init__() 期间创建一个继承 PyQt5.QtWidgets.QWidget 的新类,调用 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)
    

相关问题