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

问题描述

我使用PyQt5编写了GUI,最近我想将所有QLabel的字体大小增加到特定大小。我可以遍历整个代码,然后分别更改qfont。但这效率不高,我想我可以重写该类并将所有QLabel字体大小设置为所需的大小。

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

解决方法

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

  • 使用Qt StyleSheet

    app.setStyleSheet("QLabel{font-size: 18pt;}")
    
  • 使用QApplication::setFont()

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

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

是否有Qt的python源?

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

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

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

如何覆盖默认字体?

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

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

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

目标?

目标可能是小部件本身,其父级之一甚至是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都使用font propagation(与调色板传播一样多),但是只要设置了样式表,它就会即使已在父窗口小部件的 any 上设置了优先级(直到顶级窗口 OR QApplication实例)。

无论何时应用样式表,基于CSS Selectors都有各种可能性:

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

请注意,setFontsetStyleSheet都支持传播,但是setStyle仅在设置为QApplication实例时才可用于子级:如果使用widget.setStyle(),则不会会影响小部件的任何子级。

最后,请记住:

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

Qt样式表

这可能是您所处情况中最简单的方法,您实际上是在尝试对所有QLabel应用特定的“样式”。您可以将样式应用于整个应用程序或特定窗口,这将影响与选择器匹配的所有子代。

因此,在您的情况下,要应用于应用程序中的所有小部件,您可以执行以下操作来设置所有QLabel实例的字体大小:

  app = QApplication([])
  app.setStyleSheet('.QLabel { font-size: 14pt;}')

注意:请确保先设置样式表 ,然后再将小部件附加到其父项,否则您将需要手动触发样式刷新。

还...

  • .QLabel选择器仅适用于QLabel类实例,而不适用于继承QLabel的类。要同时应用于QLabel和继承的类,请在样式表中使用QLabel {...}代替.QLabel {...}

一些文档可以帮助您:

,

完成Adrien的回答,您可以使用QFont类并为每个按钮执行.setFont()方法。

my_font = QFont("Times New Roman",12)
my_button.setFont(my_font)

使用此类,您还可以更改一些字体参数,请参见https://doc.qt.io/qt-5/qfont.html

是的,可以阅读C ++文档,因为C ++中的所有方法和类都是在Python中实现的。

UPD:QWidget类还具有setFont方法,因此您可以在centralwidget上设置字体大小以及使用样式表。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...