该QFontDatabase.families()
函数返回支持特定字体的列表Writing System
。
编辑
从根本上说,您的问题似乎与 unicode 有关,它支持将脚本名称分配给 unicode 代码点。从理论上讲,Qt 可以使用 unicode 数据库来确定它呈现的每个文本字符的脚本,并可能使用该信息对其应用不同的格式。
但是,似乎没有任何明显的 API 对此提供支持。
例如,QChar类可能有一个enum
用于unicode 脚本名称和一个scriptName
函数,该函数将从它返回一个特定 unicode 字符的适当值,这似乎是合理的。但是在 Qt4 或 Qt5 中都没有这样的东西。
所以我要在这里伸出我的脖子,并猜测 html/css 是在这个时间点实现你想要的唯一方法。
更新
似乎 python 的unicodedata模块也不支持脚本名称。
但是,此答案提供了一种解决方法,可以潜在地允许开发本土解决方案。
这是一个演示脚本,它QLabel
使用上面答案中的unicodedata2模块为 a 自动生成 html:
# -*- coding: utf8 -*-
import unicodedata2
from itertools import groupby
from PyQt4 import QtGui, QtCore
text = (u'چاچي चाची ćāćī (dim. of ćāćā, q.v.), '
u's.f. A paternal aunt (=ćaćī, q.v.)')
markup = [
"""
<html>
<style type="text/css">
body {font-family: Sans Serif; font-size: 8pt}
span.arabic {font-family: ClearlyU Arabic; font-size: 18pt}
span.devanagari {font-family: ClearlyU Devanagari; font-size: 12pt}
</style>
<body>
"""
]
for script, group in groupby(text, unicodedata2.script):
script = script.lower()
chunk = ''.join(group)
if script == 'common' or script == 'latin':
markup.append(chunk)
else:
markup.append('<span class="%s">%s</span>' % (script, chunk))
markup.append(
"""
</body>
</html>
"""
)
class Window(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.label = QtGui.QLabel(self)
layout = QtGui.QVBoxLayout(self)
layout.addWidget(self.label)
self.label.setText(''.join(markup))
if __name__ == '__main__':
import sys
app = QtGui.QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())