最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pyqt QGraphicsView 以鼠標為中心進行縮放功能實現(xiàn)

 更新時間:2024年10月08日 09:50:58   作者:你看我香不  
在PyQt開發(fā)中,實現(xiàn)QGraphicsView的鼠標中心縮放功能需要注意初始化以及關鍵函數(shù)的重定義,遇到不達預期的效果時,可能需要重寫所有鼠標事件,本文記錄了解決QGraphicsView鼠標縮放問題的過程,供開發(fā)者參考

注意幾個關鍵點:

1. 初始化

class CustomGraphicsView(QGraphicsView):
    def __init__(self, parent=None):
        super(CustomGraphicsView, self).__init__(parent)
        self.scene = QGraphicsScene()
        self.setScene(self.scene)
        self.setGeometry(0, 0, 1024, 600)
        # 以下初始化代碼較為重要
        self.setMouseTracking(True)
        self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)   # 按需開啟
        # self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)   # 按需開啟     
        self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
        self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)

2. 關鍵實現(xiàn)函數(shù):重定義滾輪縮放事件(可能會達不到預期效果,請看步驟3或確認初始化)

def wheelEvent(self, event: QWheelEvent) -> None:
        if event.modifiers() == Qt.ControlModifier:
            mouse_pos = event.pos()
            scene_pos = self.mapToScene(mouse_pos) #縮放前鼠標在scene的位置
            s = 1.2 #按需調整
            if(event.angleDelta().y() > 0):
                self.scale(s,s)
            else:
                self.scale(1/s,1/s)
            view_point = self.mapFromScene(scene_pos) #縮放后原scene進行映射新鼠標位置
            self.verticalScrollBar().setValue(int(view_point.y()-mouse_pos.y())) #通過滾動條進行移動視圖
            self.horizontalScrollBar().setValue(int(view_point.x()-mouse_pos.x()))
            return 
        else:
            return super().wheelEvent(event) # 保證滾動條能滾動

3. 如果未到達預期效果,可能還需重寫所有鼠標事件:

def mousePressEvent(self, event: QMouseEvent) -> None:
        if event.button() == Qt.LeftButton:
            self.dragStartPos = event.pos() #用于鼠標拖拽視圖
        return
def mouseReleaseEvent(self, event: QMouseEvent) -> None:
        pass
        return
def mouseMoveEvent(self, event):
        if event.buttons() and Qt.LeftButton: # 實現(xiàn)鼠標拖拽視圖
            newpos = event.pos()
            delta = newpos - self.dragStartPos
            self.dragStartPos = newpos
            self.verticalScrollBar().setValue(self.verticalScrollBar().value() - delta.y())
            self.horizontalScrollBar().setValue(self.horizontalScrollBar().value() - delta.x())
        return

僅此記錄,未重定義鼠標所有事件導致了近半個月的苦惱,雖然修復了但是仍不知道什么原因

到此這篇關于pyqt QGraphicsView 以鼠標為中心進行縮放的文章就介紹到這了,更多相關pyqt QGraphicsView 鼠標縮放內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • pandas?dataframe寫入到hive方式

    pandas?dataframe寫入到hive方式

    這篇文章主要介紹了pandas?dataframe寫入到hive方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Python運算符的使用簡單介紹

    Python運算符的使用簡單介紹

    這篇文章主要介紹了Python運算符的使用簡單介紹,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • 將Django項目部署到CentOs服務器中

    將Django項目部署到CentOs服務器中

    今天小編就為大家分享一篇關于將Django項目部署到CentOs服務器中的文章,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Python使用for循環(huán)遍歷字符串列表字典的操作流程

    Python使用for循環(huán)遍歷字符串列表字典的操作流程

    本文介紹了for循環(huán)遍歷字符串列表字典在Python中的重要性、應用場景、技術原理、實踐應用、常見問題及解決方案和最佳實踐等內容,旨在幫助讀者掌握for循環(huán)遍歷的基本用法和提高編程效率,需要的朋友可以參考下
    2026-05-05
  • Python二叉樹的鏡像轉換實現(xiàn)方法示例

    Python二叉樹的鏡像轉換實現(xiàn)方法示例

    這篇文章主要介紹了Python二叉樹的鏡像轉換實現(xiàn)方法,結合實例形式分析了二叉樹鏡像轉換的原理及Python相關算法實現(xiàn)技巧,需要的朋友可以參考下
    2019-03-03
  • python 同時讀取多個文件的例子

    python 同時讀取多個文件的例子

    今天小編就為大家分享一篇python 同時讀取多個文件的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Vscode 中 python模塊的導入問題

    Vscode 中 python模塊的導入問題

    文章介紹了在VSCode中使用Python開發(fā)時,遇到模塊導入錯誤的問題及原因,并提供了通過配置PYTHONPATH解決的方法,通過修改用戶配置或項目配置文件,將項目根目錄添加到PYTHONPATH中,可以使Python解釋器正確找到項目中的模塊,感興趣的朋友跟隨小編一起看看吧
    2026-04-04
  • Python queue隊列原理與應用案例分析

    Python queue隊列原理與應用案例分析

    這篇文章主要介紹了Python queue隊列原理與應用,結合具體案例形式分析了Python queue隊列的原理、功能、實現(xiàn)方法與使用技巧,需要的朋友可以參考下
    2019-09-09
  • 在主機商的共享服務器上部署Django站點的方法

    在主機商的共享服務器上部署Django站點的方法

    這篇文章主要介紹了在主機商的共享服務器上部署Django站點的方法,Django是最具人氣的Python框架,需要的朋友可以參考下
    2015-07-07
  • 分析解決Python中sqlalchemy數(shù)據(jù)庫連接池QueuePool異常

    分析解決Python中sqlalchemy數(shù)據(jù)庫連接池QueuePool異常

    這篇文章主要來給大家分析sqlalchemy數(shù)據(jù)庫連接池QueuePool的異常,給大家用詳細的圖文方式做出了解決的方案,有需要的朋友可以借鑒參考下,希望可以有所幫助
    2021-09-09

最新評論

车险| 定州市| 临安市| 都匀市| 曲阳县| 乐至县| 东乌珠穆沁旗| 宁波市| 镇江市| 安岳县| 临桂县| 荃湾区| 永清县| 涟水县| 营山县| 辉县市| 长寿区| 陆良县| 迭部县| 淮滨县| 远安县| 乳山市| 苍南县| 顺义区| 班戈县| 商洛市| 武隆县| 军事| 楚雄市| 广元市| 闻喜县| 西安市| 驻马店市| 达孜县| 海南省| 曲沃县| 沁阳市| 三台县| 视频| 舟曲县| 都兰县|