Python PyQt:如何充分利用QListWidget

Python PyQt:如何充分利用QListWidget,python,drag-and-drop,pyqt,pyqt4,qlistwidget,Python,Drag And Drop,Pyqt,Pyqt4,Qlistwidget,该代码构建了一个对话框,其中包含一个QListWidget和一个QPushButton 单击按钮可添加单个列表项 在列表项上单击鼠标右键将显示一个右键单击菜单,其中“删除项”命令可用 选择“删除项”命令可从列表小部件中删除列表项 希望了解如何实现以下ListWidgets ops: 能够上下移动列表项并重新排列。 能够多选择和多删除列表项。 更好更健壮的列表项排序。 例子: 列表小部件项可以通过拖放上下移动,但默认情况下不启用。要打开它,请执行以下操作: self.listWidget.

该代码构建了一个对话框,其中包含一个QListWidget和一个QPushButton

单击按钮可添加单个列表项

在列表项上单击鼠标右键将显示一个右键单击菜单,其中“删除项”命令可用

选择“删除项”命令可从列表小部件中删除列表项

希望了解如何实现以下ListWidgets ops:

能够上下移动列表项并重新排列。 能够多选择和多删除列表项。 更好更健壮的列表项排序。 例子:
列表小部件项可以通过拖放上下移动,但默认情况下不启用。要打开它,请执行以下操作:

    self.listWidget.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
    self.listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
    self.listWidget.setSortingEnabled(True)
多选是几种可用选项之一。要打开它,请执行以下操作:

    self.listWidget.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
    self.listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
    self.listWidget.setSortingEnabled(True)
默认情况下禁用排序。要打开它,请执行以下操作:

    self.listWidget.setDragDropMode(QtGui.QAbstractItemView.InternalMove)
    self.listWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
    self.listWidget.setSortingEnabled(True)
要对列表重新排序,请执行以下操作之一:

    self.listWidget.sortItems() # ascending by default
    self.listWidget.sortItems(QtCore.Qt.DescendingOrder)

默认情况下,排序按字母顺序,不区分大小写。如果需要自定义排序顺序,请子类QListWidgetItem并重新实现其小于运算符:

class ListWidgetItem(QtGui.QListWidgetItem):
    def __lt__(self, other):
        return self.text() < other.text() # or whatever

根据我的经验,当您必须处理插入、删除、排序、排序等操作时,使用基于QListView视图模型通常比使用基于QListWidget项的更好。QabstracteModel拥有排序、插入等所需的所有插槽。关于第3项:更好和更健壮意味着什么?现在,排序以“第2项”、“第20项”、“第3项”、“第4项”结尾等方式列出字符串。这种简单的字符串排序背后没有逻辑。其次,listItems名称及其QT对象在self.listItems字典中排序,这将不允许创建两个或多个具有相同名称的列表项,因为它们被用作字典键。我想知道是否还有其他更好更“受欢迎”的方式来做这件事。。。因为我在这里使用它的方式都是我自己想出来的。排序是按字母顺序的,不区分大小写,这似乎是一个合理且合乎逻辑的默认值。我不理解您示例中listItems dict或rebuildListWidget方法的用途,这两种方法似乎都是多余的。看看如何以不同的方式进行操作会很有趣!发帖!