我想通过直接导入.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“”, 已经有布局
答案 0 :(得分:1)
我找到了解决这个问题的方法,即使它不适合我,我认为它可以帮助别人。
我必须在此小部件的BUNDESLAND_NAME
期间创建一个继承PyQt5.QtWidgets.QWidget
的新类,调用__init__()
函数来捕获widget.ui文件。
loadUi()