PySide2 应用程序无法识别接口生成文件中的 QString。
代码由 pyside2-uic 实用程序生成:
################################################################################
## Form generated from reading UI file 'RoleChooseDialog.ui'
##
## Created by: Qt User Interface Compiler version 5.14.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################
from PySide2.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
QRect, QSize, QUrl, Qt)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QFont,
QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap,
QRadialGradient)
from PySide2.QtWidgets import *
# Первая строка кода с QString()
self.comboBox.addItem(QString())
...
抛出以下错误:
File "<...>.py", line 27, in setupUi
self.comboBox.addItem(QString())
NameError: name 'QString' is not defined
我忘记安装/连接/推送/安装/导入什么?
Z.Y. 我在 QtCreator 5.14.0 Windows 10 下运行。在 Ubuntu 16.04 下没有这样的错误
临时解决方案(又名“拐杖”)
如果我在第一行添加到这些生成的文件中QString = str,这当然是“不错的”,但问题仍然存在)
他们在 Internet 上写道,该实用程序存在这样的行为
pyside2-uic。它可以通过安装另一个版本的实用程序(早期和未修补),或者通过编写一个小脚本来替换由 uic 生成的文件,在第一行中的条目第二个选项更可取,因为即使在较新版本的 pyside2-uic 中,ui 文件生成错误也会间歇性发生。此外,由于该实用程序的运行,会出现其他工件,这些工件便于在预处理器功能中修复,下面给出一个示例。
脚本示例:
应该在应用程序入口点文件的最开始调用此脚本。让入口点是 main.py 文件,然后调用将如下所示:
我也踩过这个耙子。但我决定只用一个空字符串替换它:
此外,新的 uic 中还有一些其他错误:
QDateTimeEdit,它会忘记QDate将其添加到列表中import。promoted widget也是歪歪扭扭import地为他们生成的。qt5-tools 5.14.1 的全新更新带来了变化:
QString 的问题消失了,现在一切都很好
如果该类的文件
Promoted widget位于单独的目录中,那么之前的一切都非常糟糕。现在唯一的问题是目录分隔符仍然是“/”。您必须手动将其替换为 Python 期望的点(for 的命令sed与上面相同,但您需要绑定到目录名称以便不必要地更改它)QDate 总是忘记将其添加到导入列表中
使用给定文本和给定用户数据(存储在 UserRole 中)将项目添加到下拉列表。该元素被添加到现有元素的列表中。
替换
self.comboBox.addItem(QString())为self.comboBox.addItem('')