- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试通过在 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/
我有下一个方程组: #dY0=/dt = k1*S - k2*Y1*Y0 #dY1/dt = k3*S - k4*Y1 其中 S(t) 是一个阶梯函数,在 t = 4、8、12 等时增加一个单位。我的
卡在这个上了。 我刚刚开始使用 RubyMotion,现在又开始使用 ProMotion。我只是在制作一个待办事项风格的应用程序,只是为了学习一些东西。我在将数据保存到文件时遇到问题。现在忽略保存数据
我正在使用 PyQt 并尝试在 QtDesigner 中推广一个小部件。如果我在“头文件”字段中指定包含我的小部件子类的文件的完整模块路径,我就能让它工作。 有没有更好的方法将 QtDesigner
我一直在学习 Qt Designer 中的子类化和小部件提升,并且我提升了一些 QPushButtons。我提升的类代表计算器上的数字键,并在构造函数中接受一个参数。给定的参数是按钮的编号,它是作为
我使用 Cucumber 和 Capybara 编写了一个功能来测试我的网络应用程序的默认配置。部分功能如下所示: And the page has a photo labeled "Device"
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我正在编写一个 C++ 代码来进行 2D 和 3D 计算。主函数有一个参数,我可以从中判断是进行 2D 还是 3D 计算(dim=2 或 dim=3)。启用/禁用基于 dim 编译特定代码段的最佳选择
我的 Facebook 应用程序具有已批准的ads_read、manage_pages ads_management、business_management 和 Ads Management 标准访问
我尝试重新实现 mouseClickEvent,因为我需要区分右键单击和左键单击。我将我的QListView提升为WavList,并编写了以下代码,但出现了错误。 wavlist.h #ifndef
我是一名优秀的程序员,十分优秀!