我有一个小部件,通常但并非总是一个按钮,我想为它的边缘和宽度设置动画效果以模拟滚动效果。但是,不同的小部件具有不同的边距,如Qt Designer中使用CSS设置的那样。我需要检索页边距,文档说我可以通过child.contentsMargins()
完成。这是不正确的,因为:
widget.contentsMargins()
返回0, 0, 0, 0
。实际边距为20, 20, 0, 0
。widget.style().subElementRect(QtWidgets.QStyle.SE_PushButtonFocusRect, QtWidgets.QStyleOptionButton())
返回2, 3, -4, -6
,似乎与任何地方都没有关系。widget.style().subElementRect(QtWidgets.QStyle.SE_PushButtonFocusRect, QtWidgets.QStyleOptionButton(), widget)
返回21, 21, -22, -22
,似乎也与任何地方都没有关系。我看到的唯一选择是解析样式表并动态更新它,每帧一次,但是我真的不想对动画的每一帧都进行字符串操作,因为亲爱的上帝,这是一种使事物动起来的可怕方法顺利。无法访问内置的这些值吗?
更新:简单复制:
from PyQt5 import QtWidgets
QtWidgets.QApplication([])
b = QtWidgets.QPushButton()
b.setStyleSheet("margin: 15px")
b.contentsMargins().top() #is 0, should be 15