Add 03-11-02-02

QFontComboBox-功能作用
This commit is contained in:
muzing 2022-08-22 16:08:32 +08:00
parent 3970a7ceb5
commit a0a0f84e0a

View File

@ -0,0 +1,95 @@
import sys
from PySide6 import QtGui, QtWidgets
"""
QFontComboBox 功能作用
=========================== 显示字体 ===========================
可以指定当下拉框打开时使用font字体显示指定的fontFamily字体族
.setDisplayFont(font_family: str, font: QFont) 在下拉框预览中以font字体展示font_family字体族条目
=========================== 书写系统 ===========================
可以筛选出只显示某种书写系统拉丁语希腊语阿拉伯语简体中文的字体
书写系统详见https://doc.qt.io/qt-6/qfontdatabase.html#WritingSystem-enum
.setWritingSystem(writing_system: QFontDatabase.WritingSystem)
.writingSystem() -> QFontDatabase.WritingSystem
=========================== 示例文本 ===========================
可以为某些特定的字体或特定的书写系统指定示例文本例如默认会在简体中文系统的字体后面添加中文示例作为
示例文本等
.setSampleTextForFont(font_family: str, sample_text: str)
.setSampleTextForSystem(writing_system: QFontDatabase.WritingSystem, sample_text: str)
.sampleTextForFont(font_family: str) -> str
.sampleTextForSystem(writing_system: QFontDatabase.WritingSystem) -> str
=========================== 字体过滤器 ===========================
可以添加过滤器来筛选出特定类型的字体如可缩放字体等宽字体
QComboBox.FontFilter筛选器详见下文多个筛选器间使用|连接即可
.setFontFilters(filters: QFontComboBox.FontFilters)
.fontFilters() -> QFontComboBox.FontFilters
QComboBox.FontFilter枚举值具体有如下取值
https://doc.qt.io/qt-6/qfontcombobox.html#FontFilter-enum
QFontComboBox.AllFonts 显示所有字体
QFontComboBox.ScalableFonts 显示可缩放字体
QFontComboBox.NonScalableFonts 显示不可缩放字体
QFontComboBox.MonospacedFonts 显示等宽字体
QFontComboBox.ProportionalFonts 显示比例字体
"""
class MyWidget(QtWidgets.QWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWindowTitle("QFontComboBox-功能作用")
self.resize(800, 600)
self.setup_ui()
def setup_ui(self) -> None:
"""设置界面"""
# 创建一个字体选择下拉框
fcb = QtWidgets.QFontComboBox()
# 创建示例文本并连接信号,当用户选择字体改变时,对应改变示例文本的字体
text_label = QtWidgets.QLabel("我能吞下玻璃而不伤身体。\nThe quick brown fox jumps over the lazy dog.")
fcb.currentFontChanged.connect(text_label.setFont) # type: ignore
# 使用布局管理器布局界面
layout = QtWidgets.QVBoxLayout()
layout.addWidget(fcb)
layout.addWidget(text_label)
self.setLayout(layout)
# ======================== 设置显示字体 ========================
fcb.setDisplayFont("Arial", QtGui.QFont("Arial Black", italic=True)) # 注意在本地测试时使用本机已安装的字体
# 此时在combobox中的"Arial"条目是用黑体斜体显示的而非原来的Arial字体
# ======================== 设置示例文本、书写系统 ========================
fcb.setSampleTextForFont("HarmonyOS Sans SC", "鸿蒙字体示例") # 为指定字体添加示例文本
# fcb.setWritingSystem(QtGui.QFontDatabase.SimplifiedChinese) # 设置只显示简体中文书写系统的字体
# 为指定文字系统(简体中文、希腊语、拉丁语、阿拉伯语……)添加示例文本
fcb.setSampleTextForSystem(QtGui.QFontDatabase.SimplifiedChinese, "我能吞下玻璃而不伤身体。")
fcb.setSampleTextForSystem(QtGui.QFontDatabase.TraditionalChinese, "我能吞下玻璃而不傷身體。")
# 获取示例文本
print(fcb.sampleTextForSystem(QtGui.QFontDatabase.SimplifiedChinese))
print(fcb.sampleTextForSystem(QtGui.QFontDatabase.Arabic))
# ======================== 设置字体筛选器 ========================
# 筛选出等宽且不可缩放的字体
# fcb.setFontFilters(
# QtWidgets.QFontComboBox.MonospacedFonts | QtWidgets.QFontComboBox.NonScalableFonts
# )
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
window = MyWidget()
window.show()
sys.exit(app.exec())