Gwe*_*ier 3 python qt-creator pyqt5 pyuic
我想通过直接导入 .ui 文件来使用使用 QtCreator 创建的自定义小部件。目前我的代码在使用时工作正常pyuic5
目前,当我用来创建 .py 文件但我希望能够直接从 .ui 文件导入我的小部件。一些工作代码:
主要.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)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
有没有办法使用LoadUi()
或类似的方法来避免使用pyuic
?到目前为止我已经尝试过:
主要.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)
Run Code Online (Sandbox Code Playgroud)
当我尝试将小部件添加到主窗口的布局时,出现此错误:
QWidget::setLayout:尝试在已经有布局的 QFrame“frame”上设置 QLayout“”
我找到了解决这个问题的方法,即使它对我来说不是理想的,我认为它可以帮助其他人。我必须创建一个在该小部件PyQt5.QtWidgets.QWidget
期间继承的新类,调用该函数来捕获 widget.ui 文件。__init__()
loadUi()
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)
Run Code Online (Sandbox Code Playgroud)