gpt4 book ai didi

python - pyQt 和 QTextEdit : Why are some unicode characters are shown, 其他不是吗?

转载 作者:太空宇宙 更新时间:2023-11-03 16:14:21 25 4
gpt4 key购买 nike

我尝试在 pyQt 的 QTextEdit 中显示 unicode 文本。

它是 Mac OSX El Capitan 上的 Python 2.7 和 PyQt4。

我阅读了一些有关 python、QString 和 unicode 的问答,并提出了以下运行示例。

运行时,它将两个 unicode 字符串打印到终端,并在主窗口的 QTextEdit 中显示它们。第一个字符串是好的(我从 stackoverflow 上的问答中复制了它,实际上我不知道它的英文意思是什么......)。我看到所有字符都在我的终端和 QTextEdit 中正确显示。

但是,尽管在终端中正确打印了第二个字符串的表情符号,但 QTextEdit 中缺少它们。在 QTextEdit 中,“---”之间有两个空格。当我复制 QTextEdit 中的空白并将其粘贴到终端中时,我看到了表情符号。所以看起来内容在那里,但没有图形表示。

我将字体系列设置为 Monaco,因为这是我的文本终端以及我用于开发的 Eclipse 中的字体。 Eclipse 在其编辑器中也能正确显示表情符号。

所以我假设 Monaco 字体系列会支持表情符号。

我做错了什么?

感谢您的帮助

阿明

运行示例:抱歉,篇幅较长,这是从现有代码和 pyuic 生成的 ui 类中零碎复制的...

# -*- coding: utf-8 -*-
'''
'''
# Importing the necessary Qt classes.
import sys
import re
import sip
import time

from PyQt4 import QtCore
from PyQt4.QtCore import *
from PyQt4.QtGui import *

from PyQt4 import QtGui

try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s

try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)

class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName(_fromUtf8("Dialog"))
Dialog.resize(550, 350)
self.ExitButton = QtGui.QPushButton(Dialog)
self.ExitButton.setGeometry(QtCore.QRect(420, 310, 100, 35))
self.ExitButton.setObjectName(_fromUtf8("ExitButton"))
self.logView = QtGui.QTextEdit(Dialog)
self.logView.setGeometry(QtCore.QRect(20, 30, 500, 280))
self.logView.setReadOnly(False)
self.logView.setObjectName(_fromUtf8("logView"))

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

def retranslateUi(self, Dialog):
Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
self.ExitButton.setText(_translate("Dialog", "Exit", None))

class MainWindow(QMainWindow, Ui_Dialog):

# quit
def finish(self):
quit()

def __init__(self):
QMainWindow.__init__(self)

# set up User Interface (widgets, layout...)
self.setupUi(self)

# custom slots connections
QtCore.QObject.connect(self.ExitButton, QtCore.SIGNAL("released()"), self.finish)

self.logView.setFontFamily("Monaco")

print("Zażółć gęślą jaźń")
print("Xc😍😙--")

t = QString.fromUtf8("---Zażółć gęślą jaźń---")
self.logView.append(t)

t = QString.fromUtf8("---😍😙---")
self.logView.append(t)


print("family is " + self.logView.fontFamily())
self.logView.append("family is " + self.logView.fontFamily())


# Main entry to program. Sets up the main app and create a new window.
def main(argv):

# create Qt application
app = QApplication(argv,True)

# create main window
wnd = MainWindow() # classname
wnd.show()

# Connect signal for app finish
app.connect(app, QtCore.SIGNAL("lastWindowClosed()"), app, QtCore.SLOT("quit()"))

# Start the app up
sys.exit(app.exec_())

if __name__ == "__main__":
main(sys.argv)

最佳答案

您正在使用的 python 的 sys.maxunicode 的输出是什么?如果是 65535(而不是 1114111),则您使用的是 python 的版本,它不支持 BMP 之外的字符。 .

“😍”的 unicode 代码点是 128525,“😙”65535 是 128537,两者都超出了 65535。在狭窄的构建中,这些将表示为代理对,这大概是 Qt 不知道的如何渲染。

PEP-261 ,可以编译一个广泛的 python 版本(通过使用 --enable-unicode=ucs4 选项),它支持 BMP 之外的字符。 (对于 python > 3.3,只能进行广泛的构建)。

关于python - pyQt 和 QTextEdit : Why are some unicode characters are shown, 其他不是吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39040732/

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