为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉丁的传说 2022-10-06 19:35:50
我想在 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() 在同一个小部件上使用,如果设置冲突,样式表将优先。


查看完整回答
反对 回复 2022-10-06
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号