2009-06-07 107 views
2

我想繼承QLabel添加那裏點擊事件處理。 我想這樣的代碼:PyQt - 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() 

但沒有發送者對象在自己。我做錯了什麼?

+0

我不知道PyQt是如何工作的,但是你從QObject獲得sender(),那麼labelPressed插槽的類是否繼承自QObject?它應該是因爲它有一個槽...至少在C++中。 – 2009-06-08 08:19:34

回答

1

回答你的第二個問題,我將繼續基於@gnud例如:

  • 子QLabel,覆蓋mouseReleaseEvent並添加給班上的信號,我們稱之爲點擊。
  • 檢查在mouseReleaseEvent中點擊了哪個按鈕,如果是左邊的則發出點擊信號。
  • 將插槽連接到您的標籤點擊信號並使用裏面的sender()來知道哪個QLabel被點擊。
1

QWidget/QLabel中沒有函數clickEvent。你可以說功能連接到一個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!' 
1

PyQt Wiki作品的回答非常好,但我想補充的是,clickable類應該調用widget.mouseReleaseEventreturn True前右),以防用戶已經定製了這個事件。

+0

好點 - 但對於`eventFilter`來說,在所有情況下簡單地`返回False`是更正確的(因爲它實際上並不處理事件)。 – ekhumoro 2012-01-27 23:37:25