使用 Python 在 QTextEdit 中检测 shift-click 拖动
Detecting shift-click drag in QTextEdit using Python
我想将 QTextEdit 子类化,以便用户可以通过按住 Shift 键并单击移动选择的任一侧来更改文本选择。现在,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_())
问题是你没有调用QMouseEvent.buttons
方法,你是在比较一个方法和Qt.LeftButton
的数值。
你必须做到:
if event.buttons() == Qt.LeftButton:
# ^^
我想将 QTextEdit 子类化,以便用户可以通过按住 Shift 键并单击移动选择的任一侧来更改文本选择。现在,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_())
问题是你没有调用QMouseEvent.buttons
方法,你是在比较一个方法和Qt.LeftButton
的数值。
你必须做到:
if event.buttons() == Qt.LeftButton:
# ^^