2017-10-22 16 views
1

QTextEditをサブクラス化して、Shiftキーを押しながら選択範囲を移動してテキスト選択を変更できるようにしたいとします。現在のところ、shift-clickはアンカーの移動を許可していません。最初のステップは、デフォルトのシフト・クリック機能を無効にすることだと思います。 mousePressEventとmouseMoveEventを使用してこれを実行しようとしましたが、Shiftキーを押しながらクリックしてマウスを移動すると、どちらのイベントもトリガーされません。選択を変更するために現在使用されているシフトクリックドラッグを検出するにはどうすればよいですか?私のコードは以下の通りです。QTextEditで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_()) 

答えて

1

問題は、あなたがQt.LeftButtonの数値と方法を比較している、あなたはQMouseEvent.buttonsメソッドを呼び出していないということです。

あなたは行う必要があります。

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

ありがとうございました。ルーキーミス。 – davideps

関連する問題