2

QLabelを継承して、クリックイベント処理を追加したいと思います。私はこのコードを試しています:

class NewLabel(QtGui.QLabel):
    def __init__(self, parent):
        QtGui.QLabel.__init__(self, parent)

    def clickEvent(self, event):
        print 'Label clicked!'

しかし、クリックした後、「ラベルがクリックされました!」という行がありません。

編集:

さて、今は「clickEvent」ではなく「mousePressEvent」を使用しています。そして、私はまだ質問があります。クリックされたラベルを正確に知るにはどうすればよいですか?たとえば、2つの編集ボックスと2つのラベルがあります。ラベルの内容はピックスマップです。ラベルにテキストがないので、ラベルの違いがわかりません。どうやってやるの?

EDIT2: 私はこのコードを作りました:

class NewLabel(QtGui.QLabel):
    def __init__(self, firstLabel):
        QtGui.QLabel.__init__(self, firstLabel)

    def mousePressEvent(self, event):
        print 'Clicked'
        #myLabel = self.sender()  # None =)
        self.emit(QtCore.SIGNAL('clicked()'), "Label pressed")

別のクラス:

self.FirstLang = NewLabel(Form)
QtCore.QObject.connect(self.FirstLang, QtCore.SIGNAL('clicked()'), self.labelPressed)

同じクラスのスロット:

def labelPressed(self):
    print 'in labelPressed'
    print self.sender()

しかし、自分自身には送信者オブジェクトはありません。私が間違ったことは何ですか?

4

3 に答える 3

2

clickEventQWidget/QLabelには関数はありません。その関数をQt信号に接続するか、次のようにすることができます。

class NewLabel(QtGui.QLabel):
    def __init__(self, parent=None):
        QtGui.QLabel.__init__(self, parent)
        self.setText('Lorem Ipsum')

    def mouseReleaseEvent(self, event):
        print 'Label clicked!'
于 2009-06-07T20:15:51.067 に答える
1

2番目の質問に答えて、@gnudの例に基づいて続行します。

  • QLabelをサブクラス化し、mouseReleaseEventをオーバーライドして、クラスにシグナルを追加します。クリックされたと呼びましょう。
  • mouseReleaseEventでクリックされたボタンが左側にある場合は、クリックされた信号を発します。
  • スロットをラベルのクリックされたシグナルに接続し、内部のsender()を使用して、どのQLabelがクリックされたかを確認します。
于 2009-06-07T21:04:12.203 に答える
1

PyQt Wikiからの回答は非常にうまく機能しますが、ユーザーがこのイベントをカスタマイズした場合に備えて、クラスが(直前に)clickable呼び出す必要があることを付け加えておきます。widget.mouseReleaseEventreturn True

于 2012-01-27T19:00:20.947 に答える