首页 > 解决方案 > mousePressEvent 对 QLabel 不起作用

问题描述

我阅读了很多关于如何在 QLabel 中获取图像上单击位置坐标的教程(Qt Creator 在“form.ui”中定义的以下代码中的“label_2”)。其中大多数是指使用mousePressEvent方法。但是,执行该方法后,当我单击导入图像上的某个点时,它不起作用。似乎mousePressEvent从来没有被任何东西调用过。想知道它出了什么问题。是否遗漏了任何琐碎或非琐碎的事情?

import sys
import os
from PySide2.QtWidgets import QApplication, QWidget
from PySide2.QtCore import QFile, Qt
from PySide2.QtUiTools import QUiLoader
from PySide2.QtGui import QPixmap

class qttest(QWidget):
    def __init__(self):
        super(qttest, self).__init__()
        self.load_ui()
        self.showImage()

    def load_ui(self):
        loader = QUiLoader()
        path = os.path.join(os.path.dirname(__file__), "form.ui")
        ui_file = QFile(path)
        ui_file.open(QFile.ReadOnly)
        self.ui = loader.load(ui_file, self)
        ui_file.close()

    def showImage(self,file='img.jpg'):
        pixmap = QPixmap(file)
        pixmap1 = pixmap.scaled(200, 200, Qt.KeepAspectRatio)
        self.ui.label_2.setPixmap(pixmap1)
        self.ui.label_2.mousePressEvent = self.getPos

    def getPos(self,event):
        x = event.pos().x()
        y = event.pos().y()
        print(x,y)

if __name__ == "__main__":
    app = QApplication([])
    widget = qttest()
    widget.show()
    sys.exit(app.exec_())

标签: pythonpyside2qlabel

解决方案


自己解决了问题。self.ui = loader.load(ui_file, self)在代码中不是将“form.ui”中的所有项目都考虑在内的推荐方式。通过使用uic从 PyQt5 包中导入,可以解决这个问题。


推荐阅读