ボタンを使っていると、「あ、右クリックには別のイベントいれたいな、、、」っとこないだ僕は思いました(*´ω`*)
左クリックなら「clicked」っという便利なシグナルが用意されていますが、右クリックのシグナルは、、、
ない(´-﹏-`;)
PySide(Qt)は、自分でシグナルを作ることも可能ですので、「ないならば、作ってしまえ!」っと、ボタンを右クリックしたら任意のイベントをコネクションできるようにしてみたいと
思いまーーーーす
(*´ω`*)
ベースクラス
今回は、使用頻度が高そうな「QPushButton」をベースに作ってみたいと思います(*´ω`*)b
マウスのクリックして離したタイミングの処理「mouseReleaseEvent」を、予めオーバーライドしておきます。
from PySide import QtCore from PySide import QtGui class RightClickButton(QtGui.QPushButton): def mouseReleaseEvent(self, e): pass
シグナルの追加
右クリックをした時のシグナル「rightClicked」を追加したいと思います。これで「button.rightClicked.connect」っとスロットをコネクションできるようになります(*´ω`*)
from PySide import QtCore from PySide import QtGui class RightClickButton(QtGui.QPushButton): rightClicked = QtCore.Signal() def mouseReleaseEvent(self, e): pass
右クリックの実装
「mouseReleaseEvent」では、引数「e」からどのボタンがクリックされたか調べることができます。右クリックならシグナル「rightClicked」をemitして、それ以外の場合は、基底クラスの処理をするようにしてみたいと思います。
from PySide import QtCore from PySide import QtGui class RightClickButton(QtGui.QPushButton): rightClicked = QtCore.Signal() def mouseReleaseEvent(self, e): if e.button() == QtCore.Qt.RightButton: self.rightClicked.emit() else: super(RightClickButton, self).mouseReleaseEvent(e)
使い方
このボタンを使う時は、以下のような感じになります(゚∀゚)
button = RightClickButton('Button Test', self) button.clicked.connect(左クリックのスロット) button.rightClicked.connect(右クリックのスロット)
お役立ていただければ幸いです(`・ω・´)ゞ