wheelEvent()函數(shù)是鼠標滾輪事件的觸發(fā)函數(shù),我們通過重寫wheelEvent()函數(shù)進行控制。
大多數(shù)視圖類和一部分控件應(yīng)該都有wheelEvent()函數(shù)
#放大倍數(shù)
self.enlarge_factor=1.20
#縮小倍數(shù)
self.shrink_factor=1/self.enlarge_factor
#縮放等級
self.zoom_grade=5
#一次縮放的等級提升
self.zoom_step=1
#縮放鎖
self.zoom_lock=False
#縮放等級限制
self.zoom_range=[0,10]
首先定義變量,這里為了縮小和放大的比例相同,縮小倍數(shù)為1除以放大倍數(shù)。
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函數(shù)。
這里的event對象是個QWheelEvent事件對象。
?event.angleDelta()返回一個Qpoint對象,代表滾動的數(shù)值。單位是8分之一度。轉(zhuǎn)一下一般是15度,即120。這個對象只有y有值,因為滾輪只在y軸前后滾動。這就是為什么要用event.angleDelta().y()。
.scale(x,y)是對視圖進行等比例伸縮。x,y分別代表x軸y軸的伸縮倍數(shù)。文章來源:http://www.zghlxwxcb.cn/news/detail-529065.html
#設(shè)置錨點是鼠標位置
self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
#設(shè)置錨點是正中心
# self.setTransformationAnchor(QGraphicsView.AnchorViewCenter)
還要考慮到伸縮的參考點(就是中心點,也叫錨點)。setTransformationAnchor()函數(shù)可對視圖進行設(shè)定,由于這是對視圖屬性的設(shè)定,這段代碼放到初始化函數(shù)就行。文章來源地址http://www.zghlxwxcb.cn/news/detail-529065.html
到了這里,關(guān)于Pyqt通過鼠標滾輪進行縮放界面的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!