2017-08-08 92 views
0

我有一個Qlabel填充QPixmap,我想要啓動一個過程/功能,一旦這個標籤點擊。我已擴大QLabel類,如下所示:使QLabel可點擊使用PyQt5

from PyQt5.QtCore import * 
from PyQt5.QtWidgets import * 
from PyQt5.QtGui import * 

class QLabel_alterada(QLabel): 
    clicked=pyqtSignal() 
    def __init(self, parent): 
    QLabel.__init__(self, QMouseEvent) 

    def mousePressEvent(self, ev): 
    self.clicked.emit() 

然後,在我的基礎pyuic5-.py文件導入,我保存擴展QLabel類的模塊,裏面的自動生成後(我用QtDesigner進行佈局) setupui,功能我改變了我的標籤從

self.label1=QtWidgets.QLabel(self.centralwidget) 

self.label1 = QLABEL2.QLabel_alterada(self.centralwidget) 

最後,在我把whetever需要的所有程序/類核心應用Python文件我添加的應用程序功能

self.ui.label1.clicked.connect(self.dosomestuff) 

應用程序不會崩潰,但標籤仍然不可點擊。有人能給我一些幫助嗎?

在此先感謝

+0

我已經發布了一個答案,但如果它是不夠的,你可以通過提供生成QtDesigner,你所做的修改代碼。 – eyllanesc

+0

tks @ eyllanesc。它仍然無法點擊。我在QtDesigner生成的代碼中做出的獨特變化是關於我想變成「可點擊」的Qlabel對象。我在文章中提到了這個變化。你認爲它可以與「self.centralWidget」作爲QLabel_alterada類的參數相關嗎? –

+0

是的,你可以做到這一點,我認爲錯誤是其他地方,所以我問你QtDesigner生成的代碼與您所做的更改。 – eyllanesc

回答

1

我不明白爲什麼你傳遞QMouseEvent父構造函數,你必須通過parent屬性,如下圖所示:

class QLabel_alterada(QLabel): 
    clicked=pyqtSignal() 
    def __init__(self, parent=None): 
     QLabel.__init__(self, parent) 

    def mousePressEvent(self, ev): 
     self.clicked.emit() 

爲了避免與進口我們可以直接的問題促進小部件如下圖所示:

我們放置一個QLabel,並右擊並選擇Promote to ...

enter image description here

我們得到下面的對話框,並放在頭文件中QLABEL2.h和促進類名稱QLabel_changed,然後按加促

enter image description here

然後我們生成的幫助的.ui文件pyuic。獲得以下結構:

├── main.py 
├── QLABEL2.py 
└── Ui_main.ui 

獲得以下結構:

class MainWindow(QtWidgets.QMainWindow): 
    def __init__(self, parent=None): 
     QtWidgets.QMainWindow.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.ui.label.clicked.connect(self.dosomestuff) 

    def dosomestuff(self): 
     print("click") 


if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    w = MainWindow() 
    w.show() 
    sys.exit(app.exec_())