- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 PySide 应用程序,我正在研究使其与 PyQt4 兼容。显然这应该不会太难,但我想尽量减少必要的代码更改次数。我遇到的最大差异(影响我的程序)是 PyQt 不包装 QUiLoader
类。
现在我意识到我仍然可以使用 PyQt 中的 uic 模块加载 ui 文件,但是我目前在 PySide 中使用 QUiLoader
的子类,它实现了一些我想要的自定义功能尽可能保留。
功能如下。我将 QUiLoader
子类化并覆盖了 createWidget()
方法。我的新实现允许您在应用程序运行时动态注册小部件促销。我可以这样做,因为 createWidget()
方法负责从 ui 文件实例化小部件,之后(我相信)标准 QUiLoader 实现应用 ui 文件中的指定属性。
我的问题是,是否有类似的方法可以在 PyQt 中覆盖以在运行时动态设置小部件提升,而不必通过 Qt Designer 和 ui 文件静态设置它。
附言我正在寻找对现有代码进行最少更改的解决方案。例如,如果我可以用在 PyQt 下提供等效行为的类替换我的 PySide QUiLoader
子类,那将是理想的。
编辑:该实现将使用类似的东西:
loader = UiLoader()
loader.registerCustomPromotion("myWidgetNameInQtDesigner",ClassToPromoteTo)
ui = loader.load('myUiFile.ui')
这实际上是我在 PySide 中使用 QUiLoader
的子类所做的。 .ui 文件中名称为 "myWidgetNameInQtDesigner"
的任何小部件都将被实例化为 ClassToPromoteTo
的实例。
最佳答案
事实证明这很容易,只要您愿意在 Qt Designer 中推广相关的小部件。
想法是向 sys.modules
添加一个虚拟模块,然后动态修改它包含的自定义小部件类。
因此,如果在 Qt Designer 中提升小部件时将“头文件”设置为“mylib.dummy”,则在使用 PyQt 加载 ui 文件时,您将执行如下操作:
from types import ModuleType
# dummy module
module = sys.modules['mylib.dummy'] = ModuleType('dummy')
if mode == 'FOO':
module.TextEdit = FooTextEdit
module.LineEdit = FooLineEdit
module.PushButton = FooPushButton
elif mode == 'BAR':
module.TextEdit = BarTextEdit
module.LineEdit = BarLineEdit
module.PushButton = BarPushButton
else:
module.TextEdit = QTextEdit
module.LineEdit = QLineEdit
module.PushButton = QPushButton
# loadUi/loadUiType will add the following import line:
# from mylib.dummy import TextEdit, LineEdit, PushButton
WidgetUI = uic.loadUiType('mywidget.ui'))[0]
ui = WidgetUI()
关于python - PyQt 中的 QUiLoader.createWidget 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21011953/
我正在尝试使用 QUiLoader 加载包含自定义小部件的 ui 文件。 我的自定义小部件(称为 CustomButton)继承自 QPushButton。 ui 文件已加载并放入我的主布局中,但所有
如果需要动态加载.ui文件,可以使用QUiLoader机制。但是,如果您在 .ui 文件中使用外部资源(如果 .ui 文件中有类似 的内容),Qt 将不会加载它。 即如果您在 Qt Designer
PySide2(5.6.0~a1) Qt UI 文件加载器返回一个空窗口,其中 PyQt5 加载器工作正常。你能向我解释一下我错在哪里吗? 不工作的 PySide2 版本: import sys fr
我正在尝试将 PySide PyQtGraph 小部件嵌入到使用 QT Creator 创建的 GraphicsView 窗口中。但是,当我导入 UI 文件并使用 QT Creator 中的“升级到”
我刚开始学习 Qt,我正在尝试使用这个 QUiLoader 创建一个简单的小部件。但我收到此错误:“设计师:在第 1 行第 0 列读取 UI 文件时发生错误:文档过早结束。” #include #i
我有: from PySide import QtGui, QtUiTools 有什么区别: ui_file = QtCore.QFile('my_ui.ui') ui_file.open(QtCo
我正在使用 QUiloader 动态加载 .pro 项目文件中未列出的 .ui 文件。 到目前为止一切顺利。问题是 lupdate 只翻译它在 .pro 文件下看到的内容。我正在使用以下命令运行它:
Widget::Widget(QWidget *parent) : QWidget(parent) { file.open(QFile::ReadOnly); QWidget *w =
如何在以下代码中接收关闭事件? class Main(QMainWindow): def __init__(self, parent=None): super(Main, se
我有一个 PySide 应用程序,我正在研究使其与 PyQt4 兼容。显然这应该不会太难,但我想尽量减少必要的代码更改次数。我遇到的最大差异(影响我的程序)是 PyQt 不包装 QUiLoader 类
我正在使用 Qt 开发一个 C++ 应用程序。我想在我的代码中使用 Qt Designer ui 文件,因为它是(在 XML 中)而不是编译代码和硬编码。我正在使用此 URL 中的示例代码。 link
看来我在这里遗漏了什么。难道不能从 QWidget 转换为 QDialog 吗? QUiLoader loader; QFile file("../../plugin/ui/settings.ui")
我是一名尝试 python gui 开发的业余爱好者(python 3、PySide2、QtDesigner)。我的代码运行良好,我只是想更好地理解一些东西。 所有教程都像这样加载用户界面(在构造函数
我使用 Qt5-Designer 创建了一个 UI,我在运行时通过调用 QUiLoader().load(qfile_object, this); 像 charm 一样工作,但现在我已经将一些 QLa
在 Win10 和 Python 3.6.6 上使用 VS Code。 此链接提供了在我正在使用的升级小部件上创建图形的相同方法: https://stackoverflow.com/a/564923
我真的很难将插槽从 Python 连接到 Qt Designer UI 文件。我已经完成了所有可以在 PySide 上找到的教程(例如:http://zetcode.com/gui/pysidetut
这个问题在这里已经有了答案: How do I load children from .ui file in PySide? (1 个回答) 关闭去年。 所以我有一个应用程序,我正在考虑从 PyQt
我是一名优秀的程序员,十分优秀!