大家好,欢迎来到IT知识分享网。
通过本文章,可以掌握以下内容:
- Pyside6 如何设置字体
- QFont和部件自带字体有什么不同
- 通过QSS如何控制字体样式
- 设置字体一些常用技巧
1、Pyside6 字体介绍
在开发桌面程序时,尽量保持字体统一风格,保持最佳展示效果。
Pyside6有他自己字体实现机制,主要通过QFont、QFontInfo、QFontMetrics、QFontMetricsF设置字体效果,但比使用html字体样式复杂的多,需要通过这些类的接口来查询和设置字体各种属性,最后由操作系统来渲染。字体匹配算法过程如下:
- 首先搜索指定的字体家族(通过setFamilies()设置)。
- 如果没有找到,将选择一个支持书写系统的替代字体。字体匹配算法将尝试找到最佳匹配所有在QFont中设置的属性。这个过程在不同的平台上有所不同。
- 如果系统上不存在可以支持文本的字体,那么将在其位置显示特殊的“缺失字符”框。
QFont
QFont类是用来处理字体的主要方式,可以指定字体的各种属性,如字体家族、大小、加粗、斜体等。Font不仅用于文本的显示,还可以用于图形界面中文本的绘制。代码示例如下:
from PySide6.QtGui import QFont # 创建一个QFont对象 font = QFont() # 设置字体家族 font.setFamily("Arial") # 设置字体大小 font.setPointSize(10) # 设置字体加粗 font.setBold(True) # 设置字体斜体 font.setItalic(False)
常用方法
- setFamily(family): 设置字体家族。例如,font.setFamily(“Arial”)。
- setPointSize(size): 设置字体的点大小。例如,font.setPointSize(12)。
- setPixelSize(size): 设置字体的像素大小。这对于确保字体在不同分辨率的屏幕上具有一致的视觉大小很有用。
- setWeight(weight): 设置字体的粗细。QFont类提供了枚举值来表示不同的字体粗细,如QFont::Bold。
- setBold(bold): 设置字体是否加粗。传入True或False。
- setItalic(italic): 设置字体是否斜体。传入True或False。
- setUnderline(underline): 设置字体是否有下划线。传入True或False。
- setStrikeOut(strikeOut): 设置字体是否有删除线。传入True或False。
获取字体属性
- family(): 返回字体家族名称。
- pointSize(): 返回字体的点大小。
- pixelSize(): 返回字体的像素大小。
- weight(): 返回字体的粗细。
- bold(): 返回字体是否加粗。
- italic(): 返回字体是否斜体。
- underline(): 返回字体是否有下划线。
- strikeOut(): 返回字体是否有删除线。
QFontInfo
QFontInfo类在Qt中用于提供关于字体的详细信息。使用QFont对象设置了字体后,可能需要获取这个字体的一些实际使用的属性,比如实际的字体家族、字体大小、是否加粗等。运行示例:
from PySide6.QtGui import QFont, QFontInfo font = QFont("Arial", 10) fontInfo = QFontInfo(font)
创建了QFontInfo对象后,可以使用它来获取字体的各种信息:
- family(): 返回字体家族的名称。
- pointSize(): 返回字体的点大小。
- pixelSize(): 返回字体的像素大小。
- italic(): 返回字体是否为斜体。
- bold(): 返回字体是否加粗。
- weight(): 返回字体的权重。
- exactMatch(): 检查请求的字体设置是否与系统中的字体完全匹配。
QFontMetrics
QFontMetrics类在PySide6中用于提供关于字体的度量信息,如字体的高度、宽度、行距等。这些信息对于在图形用户界面(GUI)中进行精确的文本布局非常重要。QFontMetrics对象是基于QFont对象创建的,它反映了字体在特定设备上的渲染方式。示例代码如下:
from PySide6.QtGui import QFont, QFontMetrics font = QFont("Arial", 10) metrics = QFontMetrics(font)
常用方法:
- height(): 返回字体的高度(基线到基线的距离)。
- ascent(): 返回字体基线以上的最大高度。
- descent(): 返回字体基线以下的最大深度。
- leading(): 返回行间距(两行基线之间的距离减去字体高度)。
- lineSpacing(): 返回行距(基线到基线的距离,等于ascent + descent + leading)。
- averageCharWidth(): 返回字体中字符的平均宽度。
- maxWidth(): 返回字体中最宽字符的宽度。
- width(text): 返回给定文本字符串的宽度。在PySide6中,这个方法已经被horizontalAdvance(text)替代。
- horizontalAdvance(text): 返回给定文本字符串的水平进展宽度,即渲染文本所需的像素宽度。
QFontMetricsF
QFontMetricsF类在PySide6中提供了一种方式来获取关于字体的度量信息,与QFontMetrics类似,但它提供了浮点数精度的度量值。这使得QFontMetricsF在需要高精度布局时特别有用,比如在绘图应用或者需要精确控制文本布局的场景中。QFontMetricsF对象是基于QFont对象创建的。需要先有一个QFont对象,然后使用这个QFont对象来创建一个QFontMetricsF对象,代码示例如下:
from PySide6.QtGui import QFont, QFontMetricsF font = QFont("Arial", 10) metricsF = QFontMetricsF(font)
常用方法:
- ascent(): 返回字体基线以上的最大高度(浮点数)。
- descent(): 返回字体基线以下的最大深度(浮点数)。
- height(): 返回字体的高度,即基线到基线的距离(浮点数)。
- leading(): 返回行间距,即两行文本基线之间的距离减去字体高度(浮点数)。
- lineSpacing(): 返回行距,即基线到基线的距离,包括行间距(浮点数)。
- averageCharWidth(): 返回字体中字符的平均宽度(浮点数)。
- maxWidth(): 返回字体中最宽字符的宽度(浮点数)。
- horizontalAdvance(text): 返回给定文本字符串的水平进展宽度,即渲染文本所需的像素宽度(浮点数)
QFont和部件自带字体对比
在PySide6(和整个Qt框架)中,每个窗口小部件(Widget)都有一个自带的字体,这个字体是从其父窗口小部件继承而来的,最终追溯到应用程序的全局字体设置。QFont对象则是用来描述字体的各种属性的,比如字体家族(如Arial、Courier等)、大小、加粗、斜体等。当创建一个窗口小部件时,它会自动使用当前Qt应用程序的默认字体设置。如果没有特别指定一个字体,那么它就会使用这个默认字体。可以通过修改小部件的QFont来改变其显示文本的字体样式。这实际上是通过调用小部件的setFont()方法并传递一个QFont对象来实现的。这里的关系是:QFont是一个工具,用于定义字体的具体样式;而小部件的字体属性,则是实际应用这些样式的地方。通过改变小部件的QFont,可以控制其文本显示的具体外观。
以下是修改全局字体样式示例代码:
import sys from PySide6.QtWidgets import * from PySide6.QtGui import QFont class MainWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setMinimumSize(400,300) self.setWindowTitle('修改默认字体示例') layout = QVBoxLayout() label = QLabel('这是默认字体', self) layout.addWidget(label) customlabel = QLabel('自定义字体', self) customlabel.setFont(QFont('微软雅黑', 20)) layout.addWidget(customlabel) self.setLayout(layout) self.show() if __name__ == '__main__': app = QApplication(sys.argv) font = QFont('Arial', 20) QApplication.setFont(font) window = MainWindow() sys.exit(app.exec())
Qss字体样式
QSS提供了一种类似于CSS的方式来设置应用程序的样式,包括字体。这种方法更加灵活,可以在不修改Python代码的情况下调整样式。示例代码:
from PySide6.QtWidgets import QApplication, QLabel if __name__ == '__main__': app = QApplication([]) # 创建标签 label = QLabel("Hello, PySide6 with QSS!") # 使用QSS设置字体样式 label.setStyleSheet(""" QLabel { font-family: Arial; font-size: 10pt; font-weight: bold; } """) label.setMinimumSize(400,300) label.show() app.exec()
选择使用QFont还是QSS:
- 编程控制 vs. 样式表:如果希望在代码中直接控制字体样式,或者需要根据某些逻辑动态改变字体样式,使用QFont会更合适。如果倾向于分离样式和逻辑,或者希望能够轻松地调整应用程序的外观而不触碰Python代码,QSS将是更好的选择。
- 应用范围:QFont设置的字体样式仅适用于单个控件或通过代码显式设置的控件集。而QSS可以通过选择器应用于整个应用程序或特定类型的控件,使得统一设置样式变得更加容易
2、字体一些常用技巧
字号统一
保持主标题、标题、小标题、正文、正文(小),辅助文字,部件字体大小统一,会让界面开重点突出,整洁,清晰
层级 |
字体大小 |
辅助文字 |
12px Extra Small |
正文(小) |
13px Small |
正文 |
14px Base |
小标题 |
16px Medium |
标题 |
18px large |
主标题 |
20px Extra large |
QFont方法与Qss样式名称对应关系
Qfont方法 |
Qsss样式 |
作用 |
StyleHint |
font-family |
提供了关于字体外观的一般提示,如是否是衬线、无衬线等 |
StyleStrategy |
font-smooth |
用于控制字体选择和渲染的更细节策略,如是否允许位图字体或强制抗锯齿 |
HintingPreference |
无 |
控制字体微调的偏好设置 |
Weight |
font-weight |
指定字体的粗细 |
Style |
font-style |
指定字体的风格,如正常、斜体或倾斜 |
Stretch |
font-stretch |
指定字体的拉伸程度 |
Capitalization |
text-transform |
控制文本的大小写转换 |
SpacingType |
letter-spacing和line-height |
用于控制字间距和行间距 |
StyleHint枚举值
StyleHint是QFont类中的一个枚举,用于指导字体匹配算法选择合适的默认字体家族,当指定的字体家族不可用时。这些样式提示帮助Qt选择一个视觉上接近用户需求的字体
枚举值 |
描述 |
QFont.AnyStyle |
不指定特定风格,让Qt选择最合适的字体 |
QFont.SansSerif |
无衬线字体,这种字体的笔画具有相同的粗细,看起来更加简洁和现代。常用于用户界面和屏幕阅读 |
QFont.Helvetica |
指定Helvetica字体或其类似物。Helvetica是一种广泛使用的无衬线字体 |
QFont.Serif |
衬线字体,这种字体在字母的笔画开始和结束的地方有额外的装饰,常用于打印文档和长篇阅读 |
QFont.Times |
指定Times Roman字体或其类似物。Times Roman是一种经典的衬线字体 |
QFont.TypeWriter |
指定等宽(打字机式)字体,每个字符占据相同的水平空间,常用于代码编辑器和文档 |
QFont.Courier |
指定Courier字体或其类似物。Courier是一种常见的等宽字体 |
QFont.OldEnglish |
指定老英式字体,这种字体模仿了中世纪手稿的书写风格,常用于装饰和特殊场合 |
QFont.Decorative |
装饰性字体,用于特殊效果和装饰用途,不建议用于正文文本 |
QFont.Monospace |
等宽字体,每个字符占据相同的水平空间,适用于代码显示和文档,确保对齐 |
QFont.Fantasy |
字体匹配器更倾向于选择映射到CSS通用字体族“fantasy”的字体 |
QFont.Cursive |
字体匹配器更倾向于选择映射到CSS通用字体族“cursive”的字体 |
QFont.System |
系统字体,使用操作系统的默认用户界面字体 |
HintingPreference枚举
可以应用于字形的不同级别的微调,以改善在像素密度可能需要时显示器上的可读性
枚举值 |
描述 |
QFont.PreferDefaultHinting |
默认的微调偏好,让系统选择最适合当前字体和大小的微调级别。这通常意味着在大字号下使用较少的微调,在小字号下使用更多的微调来保持字形的清晰度 |
QFont.PreferNoHinting |
指示不使用微调。这可能会导致字体在小尺寸时看起来不够清晰,但可以保持字形的原始比例和形状,对于某些设计或艺术项目来说可能是首选 |
QFont.PreferVerticalHinting |
只使用垂直方向的微调,而不对水平方向进行微调。这种偏好设置可以改善文本的垂直对齐,同时保持字母宽度的自然比例,适用于需要垂直对齐但又不希望字母过于扁平的场景 |
QFont.PreferFullHinting |
指示使用完全微调,即在水平和垂直方向上都进行微调。这通常提供了最佳的文本清晰度和可读性,特别是在小字号下,但可能会稍微改变字形的原始比例 |
Weight枚举
Qt使用一个从1到1000的权重刻度,与OpenType兼容。权重为1将是细薄的,而1000将是极黑的
枚举值 |
描述 |
QFont.Thin |
100 |
QFont.ExtraLight |
200 |
QFont.Light |
300 |
QFont.Normal |
400 |
QFont.Medium |
500 |
QFont.DemiBold |
600 |
QFont.Bold |
700 |
QFont.ExtraBold |
800 |
QFont.Black |
900 |
Style枚举
用于显示文本的不同字形风格
枚举值 |
描述 |
QFont.StyleNormal |
默认设置,表示字体以其常规风格显示,没有任何倾斜或斜体效果。这适用于大多数文本内容,提供了清晰且易于阅读的文本外观 |
QFont.StyleItalic |
指定字体以斜体风格显示。斜体通常用于强调文本中的某些单词或短语,或在引用、技术术语和外来语中使用。斜体风格是通过字体本身的斜体版本实现的,具有特定的设计调整,以保持美观和可读性 |
QFont.StyleOblique |
指定字体以倾斜风格显示。倾斜风格类似于斜体,但是通过将常规字体简单地倾斜一定角度来实现,而不是使用专门设计的斜体字形。倾斜风格可能不如真正的斜体风格在视觉上吸引人,但在没有斜体版本的字体中提供了一种替代方案 |
Stretch枚举
预定义的拉伸值遵循CSS命名约定。值越高,文本拉伸得越多
枚举值 |
描述 |
QFont.AnyStretch |
接受使用其他QFont属性匹配的任何拉伸(在Qt 5.8中添加 |
QFont.UltraCondensed |
50 |
QFont.ExtraCondensed |
62 |
QFont.Condensed |
75 |
QFont.SemiCondensed |
87 |
QFont.Unstretched |
100 |
QFont.SemiExpanded |
112 |
QFont.Expanded |
125 |
QFont.ExtraExpanded |
150 |
QFont.UltraExpanded |
200 |
Capitalization枚举
用于文本的渲染选项
枚举值 |
描述 |
QFont.MixedCase |
默认设置,不对文本的大小写进行任何改变,文本按照原样显示 |
QFont.AllUppercase |
将所有文本转换为大写字母。这个设置可以用于需要强调或统一文本外观的场景 |
QFont.AllLowercase |
将所有文本转换为小写字母。这可以用于某些设计风格,要求文本以全小写字母显示。 |
QFont.SmallCaps |
将所有文本转换为小型大写字母(small caps)。这意味着小写字母会被转换为小号的大写字母形式,通常用于书籍章节标题或其他需要装饰性大写字母的地方。 |
QFont.Capitalize |
将每个单词的首字母大写。这个设置适用于需要标题风格的文本,例如书籍或文章标题。 |
SpacingType
用于控制字间距和行间距
枚举值 |
描述 |
QFont.PercentageSpacing |
使用百分比来指定间距,允许根据字体大小动态调整间距 |
QFont.AbsoluteSpacing |
使用绝对值来指定间距,不随字体大小变化 |
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/161571.html