2017-08-08 309 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_())