【问题标题】:Controlling Object That MousePressEvent Returns in PyQt在 PyQt 中控制 MousePressEvent 返回的对象
【发布时间】:2016-04-07 00:03:32
【问题描述】:

我有很多显示图像的qlabels。单击此 qlabels mousePressEvent 返回单击了哪个对象,然后我在另一个大尺寸的 qlabel 中显示此图像。然后我可以使用 qpushbutton 删除图像。如果用户单击更多 qlabels 然后单击 qpushbutton,所有删除的图像。我希望用户每次点击都删除一张图片。所以我写了一个删除图片的方法,但我无法控制用户是否点击了很多图片并删除了它们。我该怎么做?

labels[i].mousePressEvent = functools.partial(self.label_click, source_label = labels[i] ,source_image = pixmap)

def label_click(self, event,source_label=None, source_image=None):

        self.labelDisplayBigImage.setPixmap(source_image)
        self.labelDisplayBigImage.setScaledContents(True)

        if(source_label.picture() == self.labelDisplayBigImage.picture()):
            self.btnCancel.clicked.connect(source_label.clear)
            self.btnCancel.clicked.connect(self.labelDisplayBigImage.clear)

【问题讨论】:

    标签: python pyqt qimage qlabel qpushbutton


    【解决方案1】:

    您可以使用QListWidget()QListWidget 的默认 selectionMode() 是 singleSelection。 或者直接将图像作为QIcon 添加到列表小部件并设置适当的iconSize:

    class MyList(QtWidgets.QListWidget):
        def __init__(self):
            QtWidgets.QListWidget.__init__(self)
            images = ['IMG_1.jpeg', 'IMG_2.jpeg', 'IMG_3.jpeg', 'IMG_4.jpeg', 'IMG_5.jpeg']       
            for i in images:
                icon = QtGui.QIcon(i)
                item = QtWidgets.QListWidgetItem(icon, i)  
                self.addItem(item)
            self.setIconSize(QtCore.QSize(150,100))
            self.setSelectionMode(1)            # 1 = SingleSelection, 2 = MultiSelection, not necessary, default mode is singleSelection
            self.setGeometry(200,200,300,500)
    

    或将包含图像的标签添加到列表小部件,然后必须为该项目提供适当的 sizeHint:

            for i in images:
                label = QtWidgets.QLabel(self)
                pm = QtGui.QPixmap(i)
                label.setPixmap(pm.scaled(QtCore.QSize(150,100)))
                item = QtWidgets.QListWidgetItem(i)
                item.setSizeHint(QtCore.QSize(200,110))
                self.addItem(item)
                self.setItemWidget(item,label)
    

    连接currentItemChanged-signal获取选中的item,(洞穴:这个信号发送2个item,当前和前一个)

            self.currentItemChanged.connect(self.findSel)
    
        def findSel(self, current, previous):
            print(current.text())
            try:
                print(previous.text())
            except AttributeError:
                print('first selection, no previous item!') 
    

    【讨论】:

    • 在 pyqt4 中用 QtGui 替换 QtWidgets
    猜你喜欢
    • 2015-01-29
    • 2022-08-09
    • 2014-08-17
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    相关资源
    最近更新 更多