AttributeError: 'QSize' object has no attribute 'adjusted'
时间: 2023-10-05 20:10:29 浏览: 74
抱歉,之前的回答有误。`QSize` 类确实没有 `adjusted()` 方法。
为了解决这个问题,我们可以使用 `QRect` 类来代替 `QSize`,因为 `QRect` 包含了 `QSize` 以及位置信息。我们可以使用 `QRect` 的 `setSize()` 方法来设置大小,使用 `QRect` 的 `moveCenter()` 方法来移动中心点,从而实现缩放效果。
以下是修改后的示例代码:
```python
from PyQt6.QtCore import QPropertyAnimation, QEasingCurve
from PyQt6.QtGui import QRect
from PyQt6.QtWidgets import QWidget, QApplication
def animate_widget_size(widget: QWidget, target_width: int, target_height: int, duration: int):
# 计算动画目标宽度和高度与当前宽度和高度的比例
width_ratio = target_width / widget.width()
height_ratio = target_height / widget.height()
# 创建 QPropertyAnimation 对象
animation = QPropertyAnimation(widget, b'geometry')
animation.setDuration(duration)
animation.setEasingCurve(QEasingCurve.OutQuad)
# 设置动画的起始值和结束值
start_rect = widget.geometry()
end_rect = QRect(start_rect)
end_rect.setSize(QSize(target_width, target_height))
end_rect.moveCenter(start_rect.center())
animation.setStartValue(start_rect)
animation.setEndValue(end_rect)
# 开始动画
animation.start()
if __name__ == '__main__':
app = QApplication([])
w = QWidget()
w.resize(200, 200)
w.show()
# 缩小 widget
animate_widget_size(w, 100, 100, 1000)
# 放大 widget
animate_widget_size(w, 200, 200, 1000)
app.exec()
```
在这个示例中,我们计算了目标宽度和高度与当前宽度和高度的比例,用于计算缩放后的大小。我们创建了一个 `QPropertyAnimation` 对象,设置动画的起始值和结束值。`start_rect` 是 widget 的当前位置和大小,`end_rect` 是缩放后的位置和大小。我们使用 `QRect` 的 `setSize()` 方法来设置大小,使用 `QRect` 的 `moveCenter()` 方法来移动中心点。最后,启动动画。
这个示例中,我们使用了 `QRect` 代替了 `QSize`,解决了之前的问题。
阅读全文