Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python检测QTextEdit中的shift单击拖动_Python_Qt_Pyside_Mousemove_Qtextedit - Fatal编程技术网

使用Python检测QTextEdit中的shift单击拖动

使用Python检测QTextEdit中的shift单击拖动,python,qt,pyside,mousemove,qtextedit,Python,Qt,Pyside,Mousemove,Qtextedit,我想将QTextEdit子类化,以便用户可以通过按住shift键并单击移动选择的任一侧来更改文本选择。现在,shift单击不允许锚点移动。我认为第一步是覆盖默认的shift-click功能。我曾尝试使用mousePressEvent和mouseMoveEvent来执行此操作,但当我按住shift键并单击并移动鼠标时,这两个事件都不会触发。如何检测当前用于修改选择的shift单击拖动?我的代码如下 我模模糊糊地记得在mouseMoveEvent中,按钮等于“无”。不过,我现在找不到那个参考资料。如

我想将QTextEdit子类化,以便用户可以通过按住shift键并单击移动选择的任一侧来更改文本选择。现在,shift单击不允许锚点移动。我认为第一步是覆盖默认的shift-click功能。我曾尝试使用mousePressEvent和mouseMoveEvent来执行此操作,但当我按住shift键并单击并移动鼠标时,这两个事件都不会触发。如何检测当前用于修改选择的shift单击拖动?我的代码如下

我模模糊糊地记得在mouseMoveEvent中,按钮等于“无”。不过,我现在找不到那个参考资料。如果这是真的,我更困惑了

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_())

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

你必须做到:

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

非常感谢。新手犯的错误。