我想在 PyQt5 中使用style sheet来布局自定义小部件。通常这是可行的:小部件与修改后的属性一起显示。然而,小部件的属性(例如style-sheet font-familyvs. QLabel.label())似乎保持默认值(s. 下面的最小示例)。样式表是否仅用于绘制小部件而不更改小部件本身?有没有办法获得“新”属性?否则,例如FontMetrics与 a 结合使用style sheet是不可能的?import sysfrom PyQt5.QtWidgets import QApplication, QLabelfrom PyQt5.QtGui import QFontInfostylesheet = '''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: Wingdingslabel.show()app.exec()
1 回答

达令说
TA贡献1821条经验 获得超6个赞
您的怀疑确实是正确的:使用样式表时,许多小部件属性都被忽略了,无论是对于它们的 getter 还是 setter。
没有直接的方法可以知道这些值,因为它们都是由 Qt 的解析器在内部管理的。
最重要的是,palette()
and font()
(fontMetrics()
显然)不受影响,因此您无法知道样式表使用的字体属性或调色板颜色是什么,如果您尝试设置字体或设置新调色板,您将不会结果(所有这一切都假设您实际上在样式表中设置了一些颜色或字体,显然)。
这也适用于其他小部件特定属性(例如,QFrame 边框样式),它们甚至可能在不同样式/系统上产生略微不同的结果。
这也是您应该使用样式表或 QPalette 的原因,因为混合它们可能会导致意外行为。
来自QWidget.palette()
文档:
警告:不要将此功能与 Qt 样式表一起使用。
来自QWidget.font()
文档:
注意:如果 Qt 样式表与 setFont() 在同一个小部件上使用,如果设置冲突,样式表将优先。
添加回答
举报
0/150
提交
取消