gpt4 book ai didi

python - 推广小部件并从生成的用户界面中使用它们

转载 作者:太空宇宙 更新时间:2023-11-04 04:59:07 25 4
gpt4 key购买 nike

我正在尝试通过在 Qt Designer 中提升自定义小部件来创建它。问题是,Qt Designer 会自动将 Ui_ 添加到小部件名称中。这会导致为 MainWindow 生成的代码出错:

ImportError: cannot import name 'promotedWidget'

我可以通过在 Qt Designer 中重命名小部件(在 Ui_ 之前)修复此错误,同时进行升级。但是,我得到了这个错误:

TypeError: object() takes no parameters

我通过创建一个仅环绕 promotedWidget 的新 Python 文件解决了这个错误:

from PyQt5 import QtCore, QtGui, QtWidgets
from promotedwidget_raw import Ui_promotedWidget

class Ui_promotedWidget(Ui_promotedWidget, QtWidgets.QWidget):
def setupUi(self, promotedWidget):
super().setupUi(promotedWidget)

if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
promotedWidget = QtWidgets.QWidget()
ui = Ui_promotedWidget()
ui.setupUi(promotedWidget)
promotedWidget.show()
sys.exit(app.exec_())

这解决了问题,但我不喜欢创建包装器只是为了让自定义小部件工作的想法。 (而且我很确定我做错了)

这是我的(示例)项目文件:

main.py
main_gui.pyw # Generated from ui
main_gui.ui
promotedwidget.pyw # Generated from ui
promotedwidget.ui

主要.py:

import sys

from PyQt5 import QtWidgets
from main_gui import Ui_MainWindow as MainWindow

app = QtWidgets.QApplication(sys.argv)

MainWindow = QtWidgets.QMainWindow()

ui = Ui_MainWindow()
ui.setupUi(MainWindow)

MainWindow.show()

sys.exit(app.exec_())

main_gui.pyw:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'main_gui.ui'
#
# Created by: PyQt5 UI code generator 5.8.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
self.gridLayout.setObjectName("gridLayout")
self.widget = promotedWidget(self.centralwidget)
self.widget.setObjectName("widget")
self.gridLayout.addWidget(self.widget, 0, 0, 1, 1)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

from promotedwidget import promotedWidget

if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())

promotedwidget.pyw:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'promotedwidget.ui'
#
# Created by: PyQt5 UI code generator 5.8.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_promotedWidget(object):
def setupUi(self, promotedWidget):
promotedWidget.setObjectName("promotedWidget")
promotedWidget.resize(400, 300)
self.gridLayout = QtWidgets.QGridLayout(promotedWidget)
self.gridLayout.setObjectName("gridLayout")
self.label = QtWidgets.QLabel(promotedWidget)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)

self.retranslateUi(promotedWidget)
QtCore.QMetaObject.connectSlotsByName(promotedWidget)

def retranslateUi(self, promotedWidget):
_translate = QtCore.QCoreApplication.translate
promotedWidget.setWindowTitle(_translate("promotedWidget", "Form"))
self.label.setText(_translate("promotedWidget", "Test"))


if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
promotedWidget = QtWidgets.QWidget()
ui = Ui_promotedWidget()
ui.setupUi(promotedWidget)
promotedWidget.show()
sys.exit(app.exec_())

我搜索了如何使用 PyQt 和 Qt Designer 制作自定义小部件,但找不到符合我需要的答案。或者我只是还不能完全理解这个过程。

最佳答案

Qt Designer 提供设计类,不提供小部件,我们有责任实现小部件并使用设计,你的情况解决方案很简单,创建 promotedWidget 类并实现通过 setupUi() 函数进行设计,如下所示:

promotedwidget.pyw:

class Ui_promotedWidget(object):
def setupUi(self, promotedWidget):
[...]
def retranslateUi(self, promotedWidget):
[...]

class promotedWidget(QtWidgets.QWidget, Ui_promotedWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.setupUi(self)

关于python - 推广小部件并从生成的用户界面中使用它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46284990/

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