我使用 PyQt5 编写了一个 gui,最近我想将我所有 QLabel 的字体大小增加到特定大小。我可以单独检查整个代码并更改 qfont。但这效率不高,我想我可以覆盖类并将所有 QLabel 字体大小设置为所需的大小。
但是,我需要了解用 python 编写的类,这样我才能弄清楚如何覆盖它。但是我没有找到任何显示 QLabel 代码的 python 文档。只有 c++ 的文档。因此,我想知道我可以从哪里获得所有 PyQt5 的 python 代码(如果存在的话)?如果没有,如何更改代码中使用的所有 QLabel 的字体大小?
原文由 Jeff Boker 发布,翻译遵循 CC BY-SA 4.0 许可协议
虽然提供的答案应该已经为您提供了足够的建议,但我想补充一些见解。
Qt 有 python 源代码吗?
首先,你找不到“用 python 编写的类”,因为(幸运的是)没有。 PyQt 是一个 绑定:它是实际 Qt 库的接口,它是用 C++ 编写的。
正如您可能已经知道的那样,虽然 Python 在当今的计算机上非常快,但它并 没有 那么 快,因此使用绑定是一个很好的折衷方案:它允许使用 Python 提供的简单语法,并提供 C++ 编译库提供的所有速度.
您可以在 此处(官方镜像)或 此处 找到 Qt 小部件的源代码。
如何覆盖默认字体?
好吧,这取决于您将如何管理您的项目。
一般来说,您可以为特定小部件、其 子 小部件、顶级窗口甚至整个应用程序设置默认字体 [大小]。至少有两种方法可以做到这一点。
setFont()
:它为 目标 设置默认字体;您可以使用something.font()
获取当前默认字体,然后使用font.setPointSize()
(或setPointSizeF()
用于浮点值),然后调用setFont(font)
允许浮点值---
在目标上。font[-*]
setStyleSheet()
;目标?
目标可能是小部件本身,它的父母之一,甚至是
QApplication.instance()
。您可以在其中任何一个上同时使用setFont()
或setStyleSheet()
:此外,请考虑为应用程序实例设置
Qt.AA_UseStyleSheetPropagationInWidgetStyles
属性。设定与传承
默认情况下,Qt 对
setFont
和setStyleSheet
都使用 字体传播(和调色板传播一样多), 但是 无论何时设置样式表,它都会优先,即使它设置在 任何 父小部件的(直到顶层窗口 或 QApplication 实例)。每当应用样式表时,根据 CSS 选择器,有多种可能性:
'font-size: 24px;'
: 无选择器,当前部件及其子部件将使用指定的字体大小;'QClass { font-size: 24px; }'
: 类和子类选择器,任何小部件(包括当前实例)及其同一类/子类的子类将使用指定的字体大小:'QClass[property="value"] {...}'
:属性选择器,如上所述,但前提是property
匹配值;请注意,值 总是 被引用,而 bool 值总是小写;'.QClass {...}'
:类选择器,但 不是 子类:如果您使用的是 QLabel 的子类并且样式表设置为.QLabel
,则不会应用该样式表;'QClass#objectName {...}'
:仅适用于objectName()
匹配的小部件;'QParentClass QClass {...}
‘: 申请属于QParentClass
'QParentClass > QClass {...}
‘: 申请属于QParentClass
的 直接 子类 QClass 的部件Note that both
setFont
andsetStyleSheet
support propagation, butsetStyle
only works on children when set to the QApplication instance: if you usewidget.setStyle()
它不会对小部件的任何子项产生影响。最后,记住: