gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 02:17:04 25 4
gpt4 key购买 nike

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

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 ?到目前为止我尝试了什么:

主要.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: Attempting to set QLayout "" on QFrame "frame", which already has a layout

最佳答案

我找到了这个问题的解决方案,即使它对我来说不是理想的解决方案,但我认为它可以帮助其他人。我必须在这个小部件的 __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)

关于python - 从 PyQt5 中的 .ui 文件导入自定义小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com