hynet1024 发表于 2023-6-15 21:18:38

关于PySide6-uic.exe转换后py文件中文显示问题

本帖最后由 hynet1024 于 2023-6-15 22:04 编辑

请教:我使在PyCharm的外部工具中设置好了PySide6-uic.exe工具,并成功将.ui文件转换为了.py文件,运行也正常,只是py文件中的中文标签、按钮文字显示例如:u"\u6b22\u8fce\u5149\u4e34\uff01"格式。

请问有什么办法让其显示本来的中文吗?

PS:使用PyQt6的Pyuic.exe转换后就是汉字,见图

Threebody1 发表于 2023-6-15 21:27:20

可以交出完整代码吗

hynet1024 发表于 2023-6-15 21:41:06

Threebody1 发表于 2023-6-15 21:27
可以交出完整代码吗

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

################################################################################
## Form generated from reading UI file 'hello.ui'
##
## Created by: Qt User Interface Compiler version 6.5.0
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QLabel, QPushButton, QSizePolicy,
    QWidget)

class Ui_Form(object):
    def setupUi(self, Form):
      if not Form.objectName():
            Form.setObjectName(u"Form")
      Form.resize(400, 300)
      self.label = QLabel(Form)
      self.label.setObjectName(u"label")
      self.label.setGeometry(QRect(160, 130, 61, 31))
      self.pushButton = QPushButton(Form)
      self.pushButton.setObjectName(u"pushButton")
      self.pushButton.setGeometry(QRect(100, 220, 75, 24))
      self.pushButton_2 = QPushButton(Form)
      self.pushButton_2.setObjectName(u"pushButton_2")
      self.pushButton_2.setGeometry(QRect(210, 220, 75, 24))

      self.retranslateUi(Form)

      QMetaObject.connectSlotsByName(Form)
    # setupUi

    def retranslateUi(self, Form):
      Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None))
      self.label.setText(QCoreApplication.translate("Form", u"\u6b22\u8fce\u5149\u4e34\uff01", None))
      self.pushButton.setText(QCoreApplication.translate("Form", u"\u8fdb\u5165", None))
      self.pushButton_2.setText(QCoreApplication.translate("Form", u"\u9000\u51fa", None))
    # retranslateUi

Threebody1 发表于 2023-6-15 21:46:43

hynet1024 发表于 2023-6-15 21:41


u字符串是py2的东西,你的py版本是?(cmd:py--version

不二如是 发表于 2023-6-15 21:51:39

在代码中手动调用 QString.fromUtf8() 方法,将 Unicode 字符串转成中文:

self.label.setText(QString.fromUtf8(u"\u6b22\u8fce\u5149\u4e34\uff01"))
这个方法会将u"\u6b22\u8fce\u5149\u4e34\uff01" 转成 "欢迎光临!"。

hynet1024 发表于 2023-6-15 21:55:32

不二如是 发表于 2023-6-15 21:51
在代码中手动调用 QString.fromUtf8() 方法,将 Unicode 字符串转成中文:




我的意思是想在转换的时候自动算成汉字,这样手动改......

hynet1024 发表于 2023-6-15 21:56:40

Threebody1 发表于 2023-6-15 21:46
u字符串是py2的东西,你的py版本是?(cmd:py--version

3.11.4

Threebody1 发表于 2023-6-15 22:04:11

hynet1024 发表于 2023-6-15 21:55
我的意思是想在转换的时候自动算成汉字,这样手动改......

转换器的问题

sfqxx 发表于 2023-6-15 22:43:58

你可以将.py文件中的u"xxx"格式的字符串替换为正常的字符串,因为这是Python 3.x默认使用Unicode编码,而PYQT6在生成UI时自动添加了字符的解码声明。可以考虑通过以下两种方式来解决:

1.修改.ui文件
直接在 .ui 文件里面设置字符编码:在Qt Designer 的 File -> Form Properties 选项卡中,在 Encoding 设置中选择想要的字符编码(如 UTF-8),然后重新转换.py文件

2.在代码中手动解码
在转换后的.py文件中找到需要修改的字符串,使用 `.decode()` 或者 `.encode().decode() `对其进行解码,示例代码如下:

label.setText(QCoreApplication.translate("Form", u"\u6b22\u8fce\u5149\u4e34\uff01", None))
可修改为:

label.setText("欢迎光临!".encode('raw_unicode_escape').decode())

求最佳答案{:10_254:}

hynet1024 发表于 2023-6-15 22:57:14

sfqxx 发表于 2023-6-15 22:43
你可以将.py文件中的u"xxx"格式的字符串替换为正常的字符串,因为这是Python 3.x默认使用Unicode编码,而PY ...

谢谢回复,但是我的Qt Designer 的 File ->中没有 Form Properties 选项卡

我叫MD 发表于 2024-3-10 17:04:17

楼主解决了没有,我也是这个问题

凊风 发表于 2024-5-29 09:45:45

我叫MD 发表于 2024-3-10 17:04
楼主解决了没有,我也是这个问题

请问楼主解决了没?
我是PyCharm中配置PySide6,也是这个问题:外部工具自动转换Ui到Py时汉字乱码。。。
页: [1]
查看完整版本: 关于PySide6-uic.exe转换后py文件中文显示问题