0

Qtでマウスの左クリックを無効にする(そしてオーバーライドする)方法はありますか? さらに良いことに、PyQt.I では、ウィジェット クラス内に次のようなものを書きました。

def mousePressEvent(self,event): 
    if event.button() == QtCore.Qt.RightButton:
        print "left"

また、これを試しました:

    def eventFilter(self, source, event):

        if event.type()==QtCore.QEvent.MouseButtonPress:
            if event.button() == QtCore.Qt.LeftButton:
                print "left"

...
app.installEventFilter(ui)

しかし、これは、フォームの背景など、左クリックしても何も起こらない場所をクリックした場合にのみ実行されます。プッシュボタンをクリックすると、マウスの左ボタンが正常に動作し、「左」が印刷されません。私は何が欠けていますか?前もって感謝します!

4

1 に答える 1

2

これは私のために働く:

# coding: utf-8
import sys

from PyQt4 import QtCore, QtGui


class MyDialog(QtGui.QDialog):
    def __init__(self, parent=None):
        super(MyDialog, self).__init__(parent)

        self.button1 = QtGui.QPushButton("Button 1")
        self.button2 = QtGui.QPushButton("Button 2")

        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(self.button1)
        hbox.addWidget(self.button2)
        self.setLayout(hbox)

        self.button1.clicked.connect(self.on_button_clicked)
        self.button2.clicked.connect(self.on_button_clicked)

        self.button1.installEventFilter(self)

    def eventFilter(self, obj, event):
        if event.type() in (QtCore.QEvent.MouseButtonPress,
                            QtCore.QEvent.MouseButtonDblClick):
            if event.button() == QtCore.Qt.LeftButton:
                print "left"
                return True
        return super(MyDialog, self).eventFilter(obj, event)

    def on_button_clicked(self):
        print('on_button_clicked')


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    w = MyDialog()
    w.show()
    sys.exit(app.exec_())
于 2013-04-26T10:00:45.423 に答える