如何检测鼠标单击使用PySide创建的GUI中显示的图像

lig*_*ist 4 python user-interface qt pyside

首先,我是Python,Qt和PySide的新手,请原谅我,如果这个问题看起来太简单了.

我要做的是在使用PySide API构建的GUI中的网格中显示一堆照片.此外,当用户点击照片时,我希望能够显示与该照片相对应的信息.此外,我希望用于显示照片的容器/小部件允许更改照片,例如,我应该能够替换网格中的任何照片,而不会再次从头开始创建整个网格照片.

最初我尝试使用QLabel来显示QPixmap,但我意识到(无论是否错误)我无法检测标签上的鼠标点击.经过一些搜索,我得到的印象是我应该继承QLabel(或其他一些相关类)并以某种方式覆盖QWidget(QLabel的父类)mousePressEvent()以启用鼠标点击检测.问题是我不知道该怎么做或者是否有任何替代小部件我可以用来包含我的照片而不是QLabel而不必经过子类定制.

任何人都可以建议一个比QLabel更合适的容器来显示照片,同时允许我检测照片上的鼠标点击或提供一些代码片段用于子类化QLabel以使其能够检测鼠标点击吗?

提前感谢您的回复.

Jef*_*eff 6

我添加了一个如何发出信号并连接到另一个插槽的示例.另外,文档都非常有帮助

from PySide.QtCore import *
from PySide.QtGui import *

import sys


class Main(QWidget):


    def __init__(self, parent=None):
        super(Main, self).__init__(parent)

        layout  = QHBoxLayout(self)

        picture = PictureLabel("pic.png", self)
        picture.pictureClicked.connect(self.anotherSlot)

        layout.addWidget(picture)
        layout.addWidget(QLabel("click on the picture"))

    def anotherSlot(self, passed):
        print passed
        print "now I'm in Main.anotherSlot"


class PictureLabel(QLabel):

    pictureClicked = Signal(str) # can be other types (list, dict, object...)

    def __init__(self, image, parent=None):
        super(PictureLabel, self).__init__(parent)        
        self.setPixmap(image)

    def mousePressEvent(self, event):
        print "from PictureLabel.mousePressEvent"
        self.pictureClicked.emit("emit the signal")

a = QApplication([])
m = Main()
m.show()
sys.exit(a.exec_())
Run Code Online (Sandbox Code Playgroud)