2016-01-03 4 views
0

У меня есть много qlabels, которые отображают изображения. Когда вы нажимаете этот qlabels mousePressEvent, этот объект будет нажат, и я покажу это изображения в другом qlabel с большим размером. Затем я смогу удалить изображение с помощью qpushbutton. Если пользователи нажмут больше qlabels, а затем нажмите qpushbutton, все изображения удалены. Я хочу, чтобы пользователи удаляли изображение за клик. Поэтому я пишу метод, который удаляет изображения, но я не могу контролировать, если пользователь щелкает много изображений и удаляет их. Как я могу это сделать ?Управление объектом, что MousePressEvent возвращается в PyQt

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) 

ответ

1

Вы можете использовать QListWidget(). Значение по умолчанию selectionMode() из QListWidget является singleSelection. Либо добавить изображения непосредственно в QIcon к listwidget и установить соответствующий 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) 

или добавить метки, содержащие изображения в listwidget, то соответствующий 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-сигналу, чтобы получить выбранный элемент, (пещеры: этот сигнал посылает 2 пунктов, текущие и предыдущие)

 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!') 
+0

Я использую PyQt4, а некоторые из кода не работают. –

+0

в pyqt4 заменить QtWidgets от QtGui –