我希望能够通过直接导入.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)
通过使用pyuic5 -x MyWidget.ui -o MyWidget.py
生成的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)
当我尝试将我的小部件添加到主窗口的布局中时,我会收到以下错误:
这意味着您正在尝试为已经拥有布局的 QFrame 设置新布局。您需要先删除现有的布局,然后再设置新布局。QWidget::setLayout: 试图在已经具有布局的 QFrame“frame” 上设置 QLayout“”,