wheelEvent()函数是鼠标滚轮事件的触发函数,我们通过重写wheelEvent()函数进行控制。
大多数视图类和一部分控件应该都有wheelEvent()函数
#放大倍数
self.enlarge_factor=1.20
#缩小倍数
self.shrink_factor=1/self.enlarge_factor
#缩放等级
self.zoom_grade=5
#一次缩放的等级提升
self.zoom_step=1
#缩放锁
self.zoom_lock=False
#缩放等级限制
self.zoom_range=[0,10]
首先定义变量,这里为了缩小和放大的比例相同,缩小倍数为1除以放大倍数。
def wheelEvent(self, event) -> None:
# print("angleDelta",event.angleDelta())
#判断是向前还是向后滚动
if event.angleDelta().y() > 0:
zoomFactor=self.enlarge_factor
self.zoom_grade+=self.zoom_step
else:
# print("zoomFactor",self.shrink_factor)
zoomFactor=self.shrink_factor
self.zoom_grade-=self.zoom_step
# print(" self.zoom_grade", self.zoom_grade)
#判断是否达到放大和缩小的限制
self.zoom_lock=False
if self.zoom_grade>self.zoom_range[1]:
self.zoom_grade=self.zoom_range[1]
self.zoom_lock=True
elif self.zoom_grade<self.zoom_range[0]:
self.zoom_grade=self.zoom_range[0]
self.zoom_lock=True
#没有限制,就按比例操作
if self.zoom_lock!=True:
self.scale(zoomFactor,zoomFactor)
重写wheelEvent函数。
这里的event对象是个QWheelEvent事件对象。
event.angleDelta()返回一个Qpoint对象,代表滚动的数值。单位是8分之一度。转一下一般是15度,即120。这个对象只有y有值,因为滚轮只在y轴前后滚动。这就是为什么要用event.angleDelta().y()。
.scale(x,y)是对视图进行等比例伸缩。x,y分别代表x轴y轴的伸缩倍数。文章来源:https://www.toymoban.com/news/detail-529065.html
#设置锚点是鼠标位置
self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
#设置锚点是正中心
# self.setTransformationAnchor(QGraphicsView.AnchorViewCenter)
还要考虑到伸缩的参考点(就是中心点,也叫锚点)。setTransformationAnchor()函数可对视图进行设定,由于这是对视图属性的设定,这段代码放到初始化函数就行。文章来源地址https://www.toymoban.com/news/detail-529065.html
到了这里,关于Pyqt通过鼠标滚轮进行缩放界面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!