PyQt:通过样式表的属性仅用于绘画?

我想在 PyQt5 中使用style sheet来布局自定义小部件。通常这是可行的:小部件与修改后的属性一起显示。然而,小部件的属性(例如style-sheet font-familyvs. QLabel.label())似乎保持默认值(s. 下面的最小示例)。


样式表是否仅用于绘制小部件而不更改小部件本身?有没有办法获得“新”属性?否则,例如FontMetrics与 a 结合使用style sheet是不可能的?


import sys


from PyQt5.QtWidgets import QApplication, QLabel

from PyQt5.QtGui import QFontInfo


stylesheet = '''

QLabel{

    font-family: Wingdings;

}

'''


app = QApplication(sys.argv)

label = QLabel('Hello World!')

label.setStyleSheet(stylesheet)

print(QFontInfo(label.font()).family())  # prints out: MS Shell Dlg 2; expected: Wingdings

label.show()

app.exec()


拉丁的传说
浏览 89回答 1
1回答

达令说

您的怀疑确实是正确的:使用样式表时,许多小部件属性都被忽略了,无论是对于它们的 getter 还是 setter。没有直接的方法可以知道这些值,因为它们都是由 Qt 的解析器在内部管理的。最重要的是,palette()and font()(fontMetrics()显然)不受影响,因此您无法知道样式表使用的字体属性或调色板颜色是什么,如果您尝试设置字体或设置新调色板,您将不会结果(所有这一切都假设您实际上在样式表中设置了一些颜色或字体,显然)。这也适用于其他小部件特定属性(例如,QFrame 边框样式),它们甚至可能在不同样式/系统上产生略微不同的结果。这也是您应该使用样式表或 QPalette 的原因,因为混合它们可能会导致意外行为。来自QWidget.palette()文档:警告:不要将此功能与 Qt 样式表一起使用。来自QWidget.font()文档:注意:如果 Qt 样式表与 setFont() 在同一个小部件上使用,如果设置冲突,样式表将优先。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python