首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改所有QLabel对象的字体大小PyQt5

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

Stack Overflow用户
提问于 2020-08-16 22:15:37
回答 4查看 25.1K关注 0票数 4

我使用PyQt5编写了一个gui,最近我想将所有QLabels的字体大小提高到一个特定的大小。我可以逐个检查整个代码,并更改q字体。但是这并不有效,我想我可以重写类并将所有QLabel字体大小设置为所需的大小。

但是,我需要理解用python编写的类,这样我就可以知道如何重写它。但是我没有找到任何python文档来显示QLabel的代码是什么样子的。只有c++的文档。因此,如果存在,我想知道在哪里可以获得所有PyQt5的python代码?如果没有,如何更改代码中使用的所有QLabels的字体大小?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-08-17 04:04:39

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

有用于Qt的python源代码吗?

首先,您无法找到“用python编写的类”,因为(幸运的是)没有。PyQt是一个https://en.wikipedia.org/wiki/Language_binding:它是一个实际Qt库的接口,它是用C++编写的。

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

您可以找到Qt 这里 (官方镜像)或这里的源代码。

如何覆盖默认字体?

这取决于你如何管理你的项目。

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

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

目标?

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

代码语言:javascript
运行
复制
    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 {...}':申请QClass类的小部件,它是QParentClass的子部件
  • 'QParentClass > QClass {...}':申请类QClass的小部件,这些小部件是QParentClass的直接子部件

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

最后,请记住:

  • 每当一个小部件被修复,它就会在“级联”模式下接收父部件的字体、调色板和样式表(最近的父级优先);
  • 无论何时设置任何相关属性,样式表都优先于调色板和字体,而调色板/字体属性与样式表不兼容(或者,至少它们以意想不到的方式运行);
票数 7
EN

Stack Overflow用户

发布于 2020-08-16 22:43:02

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

  • 使用Qt StyleSheet App.setStyleSheet(“QLabel{字体大小:18;}”)
  • 使用QApplication::setFont() custom_font = QFont() custom_font.setWeight(18);QApplication.setFont(custom_font,"QLabel")
票数 15
EN

Stack Overflow用户

发布于 2020-08-16 22:30:29

Qt样式表

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

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

代码语言:javascript
运行
复制
  app = QApplication([])
  app.setStyleSheet('.QLabel { font-size: 14pt;}')

注意:在将小部件附加到其父控件之前,一定要设置样式表,否则需要手动触发样式刷新。

还有..。

  • .QLabel选择器将只应用于QLabel类实例,而不应用于继承QLabel的类。要同时应用于QLabel和继承类,在样式表中使用QLabel {...}而不是.QLabel {...}

一些文件可以帮助你超越这一点:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63442415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档