我使用PyQt5编写了一个gui,最近我想将所有QLabels的字体大小提高到一个特定的大小。我可以逐个检查整个代码,并更改q字体。但是这并不有效,我想我可以重写类并将所有QLabel字体大小设置为所需的大小。
但是,我需要理解用python编写的类,这样我就可以知道如何重写它。但是我没有找到任何python文档来显示QLabel的代码是什么样子的。只有c++的文档。因此,如果存在,我想知道在哪里可以获得所有PyQt5的python代码?如果没有,如何更改代码中使用的所有QLabels的字体大小?
发布于 2020-08-17 04:04:39
虽然所提供的答案应该已经给了你足够的建议,但我想补充一些见解。
有用于Qt的python源代码吗?
首先,您无法找到“用python编写的类”,因为(幸运的是)没有。PyQt是一个https://en.wikipedia.org/wiki/Language_binding:它是一个实际Qt库的接口,它是用C++编写的。
您可能已经知道,虽然Python在当今计算机上速度相当快,但它是快地,所以使用绑定是一个很好的折衷:它允许Python提供的简单语法,并给出C++编译库所提供的所有速度。
如何覆盖默认字体?
这取决于你如何管理你的项目。
一般来说,您可以为一个特定的小部件、它的子部件、顶级窗口甚至整个应用程序设置默认的字体大小。至少有两种方法可以做到。
setFont()
:它为目标设置默认字体;您可以使用something.font()
获取当前默认字体,然后使用font.setPointSize()
(如果字体允许的话,使用setPointSizeF()
表示浮点数),然后在目标上调用setFont(font)
。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使用字体传播 (就像调色板传播一样)用于setFont
和setStyleSheet
,但是无论何时设置样式表,它都优先,即使它是在任何父小部件上设置的(直到顶层窗口或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
的直接子部件请注意,setFont
和setStyleSheet
都支持传播,但是setStyle
只在设置为QApplication实例时才能工作:如果使用widget.setStyle()
,则不会对小部件的任何子部件产生影响。
最后,请记住:
发布于 2020-08-16 22:43:02
要更改所有QLabels的字体,有几个选项:
QApplication::setFont()
custom_font = QFont() custom_font.setWeight(18);QApplication.setFont(custom_font,"QLabel")发布于 2020-08-16 22:30:29
Qt样式表
在您的情况下,这可能是最简单的方法,您实际上正在尝试将一种特定的“样式”应用于所有QLabels。您可以将样式应用于整个应用程序或特定窗口,这将影响与选择器匹配的所有子程序。
因此,在您的示例中,要应用于应用程序中的所有小部件,可以执行以下操作来设置所有QLabel
实例的字体大小:
app = QApplication([])
app.setStyleSheet('.QLabel { font-size: 14pt;}')
注意:在将小部件附加到其父控件之前,一定要设置样式表,否则需要手动触发样式刷新。
还有..。
.QLabel
选择器将只应用于QLabel
类实例,而不应用于继承QLabel
的类。要同时应用于QLabel和继承类,在样式表中使用QLabel {...}
而不是.QLabel {...}
。一些文件可以帮助你超越这一点:
https://stackoverflow.com/questions/63442415
复制相似问题