【问题标题】:mousePressEvent not functioning for QLabelmousePressEvent 对 QLabel 不起作用
【发布时间】:2020-11-14 04:33:11
【问题描述】:

我阅读了很多关于如何在 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_())

【问题讨论】:

    标签: python pyside2 qlabel


    【解决方案1】:

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

    【讨论】:

    • 如果有人遇到类似问题,请考虑使用此方法导入“ui”文件。 nitratine.net/blog/post/…
    • 你如何用 PySide 而不是 PyQt 做到这一点?我有同样的问题。如果我从代码创建一个 QLabel 并将一个函数分配给 mousePressEvent,它可以工作,但如果我对从 .ui 文件加载的 QLabel 执行相同操作,鼠标事件将被忽略。
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    • 2019-09-25
    • 2019-11-26
    • 2011-06-02
    • 1970-01-01
    相关资源
    最近更新 更多