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

Jef*_*ker 6 python pyqt qlabel pyqt5

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

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

eyl*_*esc 20

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


mus*_*nte 13

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

有 Qt 的 python 源码吗?

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

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

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

如何覆盖默认字体?

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

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

  1. use 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...
Run Code Online (Sandbox Code Playgroud)

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

设置与继承

默认情况下,Qt对和 都使用字体传播(与调色板传播一样多),每当设置样式表时,它都会优先,即使它是在任何父窗口小部件上设置的(直到顶级窗口QApplication实例)。setFontsetStyleSheet

每当应用样式表时,基于CSS 选择器就有各种可能性:

  • 'font-size: 24px;':没有选择器,当前小部件及其任何子部件将使用指定的字体大小;
  • 'QClass { font-size: 24px; }':类和子类选择器,任何小部件(包括当前实例)及其同一类/子类的子级将使用指定的字体大小:
  • 'QClass[property="value"] {...}':属性选择器,如上所述,但前提是与property值匹配;请注意,值始终带引号,并且 bool 值始终小写;
  • '.QClass {...}':类选择器,但不是子类:如果您使用 QLabel 的子类并且样式表设置为.QLabel,则不会应用该样式表;
  • 'QClass#objectName {...}':仅适用于objectName()匹配的小部件;
  • 'QParentClass QClass {...}': 申请 QClass 类的子部件QParentClass
  • 'QParentClass > QClass {...}': 申请 QClass 类的直接子代的小部件QParentClass

请注意,setFont和都setStyleSheet支持传播,但setStyle仅在设置为 QApplication 实例时才适用于子级:如果您使用widget.setStyle()它,则不会对任何小部件的子级产生影响。

最后,记住:

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