Pyside PyQt how to connect Key_Delete to 4 different QListWidget

My problem is that I have 4 QListWidget and I want to be able to delete the selected item in each list using the del key. So when I just connect the del key to one list, it works fine, but as soon as I connect it to a second or more, it no longer works. So far I have only found examples and explanations when you are dealing with only one QListWidget. Does anyone know what I'm doing wrong here?

import sys, os
from PySide import QtGui, QtCore

# List item to drag and drop files from windows explorer
class List(QtGui.QListWidget):
    def __init__(self, parent):
        super(List, self).__init__(parent)

        self.setAcceptDrops(True)
        self.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)

    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls:
            event.accept()
        else:
            event.ignore()

    def dragMoveEvent(self, event):
        if event.mimeData().hasUrls:
            event.setDropAction(QtCore.Qt.CopyAction)
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        all_items = []
        for i in xrange(self.count()):
            all_items.append(self.item(i))
        url = event.mimeData().urls()
        if all_items == []:
            for strUrl in url:
                self.addItem(strUrl.path()[1:])
        else:
            for strUrl in url:
                if any(item.text() in strUrl.path()[1:] for item in all_items):
                    continue
                else:
                    self.addItem(strUrl.path()[1:])

    def _del_item(self):
        for item in self.selectedItems():
            self.takeItem(self.row(item))


class MainWindow(QtGui.QWidget):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.init_ui()

    def init_ui(self):
        folder_list = [' ', 'Concept Art', 'Scripts', 'Storyboard', 'Directors Input', 'Look Dev', 'Corrections',
                       'References', 'Still References', 'Video References', 'Sound', 'Sound References']
        self.box_one = QtGui.QComboBox(parent=self)
        self.box_two = QtGui.QComboBox(parent=self)
        self.box_three = QtGui.QComboBox(parent=self)
        self.box_four = QtGui.QComboBox(parent=self)
        for i in folder_list:
            self.box_one.addItems([i])
            self.box_two.addItems([i])
            self.box_three.addItems([i])
            self.box_four.addItems([i])
        self.list_one = List(self)
        self.list_one.setGeometry(0, 0, 500, 100)
        self.list_two = List(self)
        self.list_two.setGeometry(0, 0, 500, 100)
        self.list_three = List(self)
        self.list_three.setGeometry(0, 0, 500, 100)
        self.list_four = List(self)
        self.list_four.setGeometry(0, 0, 500, 100)

        # connect del key to lists
        del_one = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.list_one)
        del_two = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.list_two)
        del_three = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.list_three)
        del_four = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.list_four)
        self.connect(del_one, QtCore.SIGNAL('activated()'), self.list_one._del_item)
        self.connect(del_two, QtCore.SIGNAL('activated()'), self.list_two._del_item)
        self.connect(del_three, QtCore.SIGNAL('activated()'), self.list_three._del_item)
        self.connect(del_four, QtCore.SIGNAL('activated()'), self.list_four._del_item)

        v_box = QtGui.QVBoxLayout()
        v_box.setSpacing(10)
        v_box.addWidget(self.box_one)
        v_box.addWidget(self.list_one)
        v_box.addWidget(self.box_two)
        v_box.addWidget(self.list_two)
        v_box.addWidget(self.box_three)
        v_box.addWidget(self.list_three)
        v_box.addWidget(self.box_four)
        v_box.addWidget(self.list_four)

        self.setLayout(v_box)
        self.setGeometry(100, 100, 500, 190)
        self.setWindowTitle('Arx Submitter')
        self.show()

def main():

    app = QtGui.QApplication(sys.argv)
    main_win = MainWindow()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
+4
source share
1 answer

keyPressEvent List, , del, , _del_item. addItems mainWindow, Widgets. . del.

, ;)

import sys, os
from PySide import QtGui, QtCore
from PySide.QtCore import Qt

# List item to drag and drop files from windows explorer
class List(QtGui.QListWidget):
    def __init__(self, parent):
        super(List, self).__init__(parent)

        self.setAcceptDrops(True)
        self.setSelectionMode(QtGui.QAbstractItemView.MultiSelection)

    def dragEnterEvent(self, event):
        if event.mimeData().hasUrls:
            event.accept()
        else:
            event.ignore()

    def dragMoveEvent(self, event):
        if event.mimeData().hasUrls:
            event.setDropAction(QtCore.Qt.CopyAction)
            event.accept()
        else:
            event.ignore()

    def dropEvent(self, event):
        all_items = []
        for i in xrange(self.count()):
            all_items.append(self.item(i))
        url = event.mimeData().urls()
        if all_items == []:
            for strUrl in url:
                self.addItem(strUrl.path()[1:])
        else:
            for strUrl in url:
                if any(item.text() in strUrl.path()[1:] for item in all_items):
                    continue
                else:
                    self.addItem(strUrl.path()[1:])

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Delete:
            self._del_item()

    def _del_item(self):
        for item in self.selectedItems():
            self.takeItem(self.row(item))


class MainWindow(QtGui.QWidget):

    def __init__(self):
        super(MainWindow, self).__init__()
        self.init_ui()

    def init_ui(self):
        folder_list = [' ', 'Concept Art', 'Scripts', 'Storyboard', 'Directors Input', 'Look Dev', 'Corrections',
                   'References', 'Still References', 'Video References', 'Sound', 'Sound References']
        self.box_one = QtGui.QComboBox(parent=self)
        self.box_two = QtGui.QComboBox(parent=self)
        self.box_three = QtGui.QComboBox(parent=self)
        self.box_four = QtGui.QComboBox(parent=self)
        for i in folder_list:
            self.box_one.addItems([i])
            self.box_two.addItems([i])
            self.box_three.addItems([i])
            self.box_four.addItems([i])
        self.list_one = List(self)
        self.addItems(self.list_one)
        self.list_one.setGeometry(0, 0, 500, 100)
        self.list_two = List(self)
        self.addItems(self.list_two)
        self.list_two.setGeometry(0, 0, 500, 100)
        self.list_three = List(self)
        self.addItems(self.list_three)
        self.list_three.setGeometry(0, 0, 500, 100)
        self.list_four = List(self)
        self.addItems(self.list_four)
        self.list_four.setGeometry(0, 0, 500, 100)

        # connect del key to lists
        #del_one = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.list_one)
        #del_two = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.list_two)
        #del_three = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.list_three)
        #del_four = QtGui.QShortcut(QtGui.QKeySequence(QtCore.Qt.Key_Delete), self.list_four)
        #self.connect(del_one, QtCore.SIGNAL('activated()'), self.list_one._del_item)
        #self.connect(del_two, QtCore.SIGNAL('activated()'), self.list_two._del_item)
        #self.connect(del_three, QtCore.SIGNAL('activated()'), self.list_three._del_item)
        #self.connect(del_four, QtCore.SIGNAL('activated()'), self.list_four._del_item)

        v_box = QtGui.QVBoxLayout()
        v_box.setSpacing(10)
        v_box.addWidget(self.box_one)
        v_box.addWidget(self.list_one)
        v_box.addWidget(self.box_two)
        v_box.addWidget(self.list_two)
        v_box.addWidget(self.box_three)
        v_box.addWidget(self.list_three)
        v_box.addWidget(self.box_four)
        v_box.addWidget(self.list_four)

        self.setLayout(v_box)
        self.setGeometry(100, 100, 500, 190)
        self.setWindowTitle('Arx Submitter')
        self.show()

    def addItems(self, widget):
        for i in range(10):
            widget.addItem("Item "+ str(i))

def main():

    app = QtGui.QApplication(sys.argv)
    main_win = MainWindow()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()
+4

All Articles