ボタンを右クリックした時のシグナル作成!!

ボタンを使っていると、「あ、右クリックには別のイベントいれたいな、、、」っとこないだ僕は思いました(*´ω`*)

左クリックなら「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(右クリックのスロット)

お役立ていただければ幸いです(`・ω・´)ゞ