使用Python检测QTextEdit中的shift-click拖动

时间:2017-10-22 10:09:11

标签: python qt pyside mousemove qtextedit

我希望将QTextEdit子类化,以便用户可以通过使用shift-click移动选区的任一侧来更改文本选择。现在,shift-click不允许锚移动。我相信第一步是覆盖默认的shift-click功能。我尝试使用mousePressEvent和mouseMoveEvent来做这件事,但是当我按住Shift键并移动鼠标时,这两个事件都没有触发。如何检测当前用于修改选择的shift-click拖动?我的代码如下。

我依稀记得在mouseMoveEvent中读取,按钮等于" none"。我现在找不到这个参考。如果这是真的,我会更加困惑。

import sys
from PySide.QtCore import *
from PySide.QtGui import *

class TextEditor(QTextEdit):

    def __init__(self, parent=None, text=None):
        super().__init__(parent)
        self.setReadOnly(True)
        self.setText(text)
        self.setMouseTracking(True) # Not sure if I will need this

    def mousePressEvent(self, event):
        if event.buttons==Qt.LeftButton:
            modifiers = QApplication.keyboardModifiers()
            if modifiers == Qt.ShiftModifier:
                print("Shift+Left Click") # This never triggers
        super().mousePressEvent(event)

    def mouseMoveEvent(self, event):
        if event.buttons==Qt.LeftButton:
            modifiers = QApplication.keyboardModifiers()
            if modifiers == Qt.ShiftModifier:
                print("Move and Shift + Left Button") # This never triggers
        super().mouseMoveEvent(event)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = TextEditor(text="Faction leaders unanimously decided to form a parliamentary inquiry committee...")
    window.show()

    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

问题是您没有调用QMouseEvent.buttons方法,而是将方法与Qt.LeftButton的数值进行比较。

你必须这样做:

if event.buttons() == Qt.LeftButton:
#               ^^