更改所有 QLabel 对象 PyQt5 的字体大小

新手上路,请多包涵

我使用 PyQt5 编写了一个 gui,最近我想将我所有 QLabel 的字体大小增加到特定大小。我可以单独检查整个代码并更改 qfont。但这效率不高,我想我可以覆盖类并将所有 QLabel 字体大小设置为所需的大小。

但是,我需要了解用 python 编写的类,这样我才能弄清楚如何覆盖它。但是我没有找到任何显示 QLabel 代码的 python 文档。只有 c++ 的文档。因此,我想知道我可以从哪里获得所有 PyQt5 的 python 代码(如果存在的话)?如果没有,如何更改代码中使用的所有 QLabel 的字体大小?

原文由 Jeff Boker 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

虽然提供的答案应该已经为您提供了足够的建议,但我想补充一些见解。

Qt 有 python 源代码吗?

首先,你找不到“用 python 编写的类”,因为(幸运的是)没有。 PyQt 是一个 绑定:它是实际 Qt 库的接口,它是用 C++ 编写的。

正如您可能已经知道的那样,虽然 Python 在当今的计算机上非常快,但它并 没有 那么,因此使用绑定是一个很好的折衷方案:它允许使用 Python 提供的简单语法,并提供 C++ 编译库提供的所有速度.

您可以在 此处(官方镜像)或 此处 找到 Qt 小部件的源代码。

如何覆盖默认字体?

好吧,这取决于您将如何管理您的项目。

一般来说,您可以为特定小部件、其 小部件、顶级窗口甚至整个应用程序设置默认字体 [大小]。至少有两种方法可以做到这一点。

  1. 使用 setFont() :它为 目标 设置默认字体;您可以使用 something.font() 获取当前默认字体,然后使用 font.setPointSize() (或 setPointSizeF() 用于浮点值),然后调用 setFont(font) 允许浮点值 --- 在目标上。
  2. 在目标中使用 font[-*] setStyleSheet()

目标?

目标可能是小部件本身,它的父母之一,甚至是 QApplication.instance() 。您可以在其中任何一个上同时使用 setFont()setStyleSheet()

     font = self.font()
    font.setPointSize(24)
    # set the font for the widget:
    self.pushButton.setFont(someFont)
    # set the font for the top level window (and any of its children):
    self.window().setFont(someFont)
    # set the font for *any* widget created in this QApplication:
    QApplication.instance().setFont(someFont)

    # the same as...
    self.pushButton.setStyleSheet(''' font-size: 24px; ''')
    # etc...

此外,请考虑为应用程序实例设置 Qt.AA_UseStyleSheetPropagationInWidgetStyles 属性。

设定与传承

默认情况下,Qt 对 setFontsetStyleSheet 都使用 字体传播(和调色板传播一样多), 但是 无论何时设置样式表,它都会优先,即使它设置在 任何 父小部件的(直到顶层窗口 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 and setStyleSheet support propagation, but setStyle only works on children when set to the QApplication instance: if you use widget.setStyle() 它不会对小部件的任何子项产生影响。

最后,记住:

  • 每当小部件重新设置父级时,它都会以“级联”模式(最接近的父级优先)接收其父级的字体、调色板和样式表;
  • 样式表在调色板和字体上都有优先权,只要设置了任何相关属性,并且调色板/字体属性与样式表 兼容(或者,至少,它们以意想不到的方式运行);

原文由 musicamante 发布,翻译遵循 CC BY-SA 4.0 许可协议

要更改所有 QLabel 的字体,有几个选项:

  • 使用 Qt 样式表
  app.setStyleSheet("QLabel{font-size: 18pt;}")

   custom_font = QFont()
  custom_font.setWeight(18);
  QApplication.setFont(custom_font, "QLabel")

原文由 eyllanesc 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题