安装 dearpygui
dearpygui显示中文和特殊字符
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# -*- coding: utf-8 -*-
#********************************************************************************
#Copyright © 2023 Wcq
#File Name: test_unicode.py
#Author: Wcq
#Email: wcq-062821@163.com
#Created: 2023-11-29 10:26:56
#Last Update: 2023-11-29 10:37:40
# By: Wcq
#Description:
#********************************************************************************
import dearpygui.dearpygui as dpg
import re
dpg.create_context()
print(f"Ω Unicode : 0x{ord('Ω'):04x}")
print(f"ant Unicode : 0x{ord('🐜'):06x}")
def extract_chinese_text(file_path):
''' 从文件中提取出中文和部分特殊字符 '''
print('file_path :', file_path)
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
# chinese_text = re.findall('[\u4e00-\u9fa5]+', content) # chinese unicode
# chinese_text += re.findall('[\u0300-\u0400]+', content) # special symbol
chinese_text = re.findall('[\u0300-\uffff]+', content) # all
chinese_list = set()
for string in chinese_text:
for c in string:
chinese_list.add(c)
chinese_list = list(chinese_list)
chinese_string = ''.join(chinese_list)
return chinese_string
def add_custom_chinese_unicode(s):
'''
由于加载所有中文Unicode 会很慢, 所以直接只加载需要的即可
'''
unicode_list = set()
for c in s:
unicode_list.add(ord(c))
unicode_list = list(unicode_list)
dpg.add_font_chars(unicode_list)
with dpg.font_registry():
with dpg.font("/home/wcq/.local/share/fonts/sarasa-mono-sc-regular.ttf", 20) as default_font:
add_custom_chinese_unicode(extract_chinese_text(__file__))
dpg.bind_font(default_font)
dpg.create_viewport(title='Custom Title', width=800, height=600)
with dpg.window(label='测试中文 Ω', width=800, height=300):
dpg.add_text(label='test' , default_value='测试 θ \u03a9')
dpg.setup_dearpygui()
dpg.show_viewport()
dpg.start_dearpygui()
dpg.destroy_context()
|
解析
字体选择
选一款同时支持显示中文和特殊字符的字体, 这里以 等距更纱黑体 为例
添加中文支持( 官网例程, 不推荐使用, 除非电脑性能非常好 )
1
2
3
4
|
dpg.add_font_range_hint(dpg.mvFontRangeHint_Default)
dpg.add_font_range_hint(dpg.mvFontRangeHint_Chinese_Simplified_Common)
# dpg.add_font_range_hint(dpg.mvFontRangeHint_Chinese_Full) # 这个会影响启动速度
dpg.bind_font(default_font)
|
但是这个相当影响速度, 启动后要一两秒钟才能加载完Unicode, 于是就有了下面的按需加载
按需加载Unicode ( 推荐 )
- 使用 extract_chinese_text 提取出文件中的所有Unicode 编码的字符串,
- 然后再使用 add_custom_chinese_unicode 来加载到dearpygui 中
这样速度相当快, 由于是自动扫描的, 所以也是相当通用
添加特殊字符支持
如果使用自动扫描的方式加载, 就不需要看下面的废话了🦉
-
支持希腊字母的 Code
1
|
dpg.add_font_range(0x1, 0x400)
|
通过Wiki 可以知道希腊字母的Unicode 编码范围是 0x0370 ~ 0x03ff, 这里直接把1 到 0x400 都包含了也是没有问题的
🐜 注意: 这里不可以包含0, 否则显示不了, 而且不会报错, 可能是0 是NULL 的原因?