首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何用PyQt正确显示所有Unicode字符?

如何用PyQt正确显示所有Unicode字符?
EN

Stack Overflow用户
提问于 2016-03-17 18:33:09
回答 1查看 1.4K关注 0票数 2

我试图在PyQt上显示几个Unicode字符(我的版本是PyQt4,来自Windows)。出于某种原因,它可以在Qt5上的C++项目中正常工作(但使用Qt5),但是一些字符在使用PyQt时显示白色框。

测试用例:

作为一个测试,我制作了一个简单的应用程序来显示⏩字符。我在一个"⏩"上使用了"<html><head/><body><p>&#9193;</p></body></html>"文本和HTML。

这在C++中是可行的:

代码语言:javascript
运行
复制
#include <QApplication>
#include <QLabel>
#include <QChar>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QLabel w("<html><head/><body><p>&#9193;</p></body></html>");
    w.show();

    return a.exec();
}

但这给我展示了一个白色的方框,里面的字符应该是:

代码语言:javascript
运行
复制
from PyQt4 import QtCore, QtGui, uic, Qt

app = QtGui.QApplication([])
w = QtGui.QLabel("<html><head/><body><p>&#9193;</p></body></html>")
w.show()
app.exec_()

我还做了一个.ui表单,并在C++和PyQt中加载了它,结果是相同的。

问题:

这是Qt4中的一个在Qt5中纠正的bug,还是PyQt中的一个bug,还是我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-17 20:18:54

这不是窃听器,你也没做错什么。

为了确认一下,你要显示的字符是:

代码语言:javascript
运行
复制
>>> import html, unicodedata
>>> unicodedata.name(html.unescape('&#9193;'))
'BLACK RIGHT-POINTING DOUBLE TRIANGLE'

因此,大多数字体都不支持一个相当晦涩的字符--包括我的系统上的默认字体,即"DejaVu Sans“。事实上,我无法在我的系统中找到一种能够显示它的字体。我必须安装“双曲线”字体,以使它正确地显示。

据推测,在您的系统上,Qt5和Qt4程序不使用相同的默认应用程序字体,这解释了PyQt4测试用例的行为差异。

编辑

我在Windows上进行了测试--这个字符也不显示在那里,原因也是一样的:现有的字体都不支持这个字符。因此,我安装了“双曲线”,但为了使字符正确显示,我必须在PyQt中显式设置它为应用程序字体。由于某些原因,Windows下部分字体转换的常用机制似乎没有正常工作--但我不知道为什么。唯一自动显示字符的程序是Firefox。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36068924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档