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

pyqt QGraphicsView 以鼠標(biāo)為中心進(jìn)行縮放功能實(shí)現(xiàn)

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

注意幾個關(guān)鍵點(diǎn):

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. 關(guān)鍵實(shí)現(xiàn)函數(shù):重定義滾輪縮放事件(可能會達(dá)不到預(yù)期效果,請看步驟3或確認(rèn)初始化)

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

3. 如果未到達(dá)預(yù)期效果,可能還需重寫所有鼠標(biāo)事件:

def mousePressEvent(self, event: QMouseEvent) -> None:
        if event.button() == Qt.LeftButton:
            self.dragStartPos = event.pos() #用于鼠標(biāo)拖拽視圖
        return
def mouseReleaseEvent(self, event: QMouseEvent) -> None:
        pass
        return
def mouseMoveEvent(self, event):
        if event.buttons() and Qt.LeftButton: # 實(shí)現(xiàn)鼠標(biāo)拖拽視圖
            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

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

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

相關(guān)文章

  • pandas?dataframe寫入到hive方式

    pandas?dataframe寫入到hive方式

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

    Python運(yùn)算符的使用簡單介紹

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

    將Django項目部署到CentOs服務(wù)器中

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

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

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

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

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

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

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

    Vscode 中 python模塊的導(dǎo)入問題

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

    Python queue隊列原理與應(yīng)用案例分析

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

    在主機(jī)商的共享服務(wù)器上部署Django站點(diǎn)的方法

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

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

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

最新評論

上犹县| 交城县| 和田县| 津南区| 疏勒县| 宝鸡市| 高青县| 大冶市| 万荣县| 麻江县| 柘荣县| 温宿县| 蓬莱市| 汉沽区| 淄博市| 巍山| 上高县| 延安市| 常州市| 自贡市| 鄱阳县| 广元市| 乌鲁木齐市| 泗洪县| 苏尼特左旗| 土默特右旗| 嘉善县| 谷城县| 五河县| 襄垣县| 神木县| 五原县| 新营市| 于田县| 新密市| 交城县| 普安县| 宁化县| 灯塔市| 鄯善县| 赤壁市|