python QListWidget和多重选择

bihw5rsg  于 2022-12-02  发布在  Python
关注(0)|答案(6)|浏览(427)

我有一个普通的QListWidget,有几个信号和插槽。一切都像我期望的那样工作。我可以更新,检索,清除等。
但是UI不支持多个选择。
如何为QListWidget“启用”多重选择?我有限的PyQt经验告诉我,我需要通过子类化来创建一个自定义的QListWidget ......但接下来该怎么做呢?
Google给了我C++的答案,但我在寻找Python
http://www.qtforum.org/article/26320/qlistwidget-multiple-selection.html
http://www.qtcentre.org/threads/11721-QListWidget-multi-selection

kognpnkq

kognpnkq1#

不幸的是,我不能帮助Python特定的语法,但你不需要创建任何子类。
创建QListWidget后,用传入的多个选择类型之一调用setSelectionMode(),可能QAbstractItemView::ExtendedSelection就是您想要的。
itemSelectionChanged()信号的插槽中,调用selectedItems()以获取QListWidgetItem指针的QList

6yoyoihd

6yoyoihd2#

对于PyQT4,

QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
4jb9z9bj

4jb9z9bj3#

在listWidget中通过多个选择获取多个选定值的示例。

from PyQt5 import QtWidgets, QtCore
class Test(QtWidgets.QDialog):
    def __init__(self, parent=None):
        super(Test, self).__init__(parent)
        self.layout = QtWidgets.QVBoxLayout()
        self.listWidget = QtWidgets.QListWidget()
        self.listWidget.setSelectionMode(
            QtWidgets.QAbstractItemView.ExtendedSelection
        )
        self.listWidget.setGeometry(QtCore.QRect(10, 10, 211, 291))
        for i in range(10):
            item = QtWidgets.QListWidgetItem("Item %i" % i)
            self.listWidget.addItem(item)
        self.listWidget.itemClicked.connect(self.printItemText)
        self.layout.addWidget(self.listWidget)
        self.setLayout(self.layout)

    def printItemText(self):
        items = self.listWidget.selectedItems()
        x = []
        for i in range(len(items)):
            x.append(str(self.listWidget.selectedItems()[i].text()))

        print (x)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    form = Test()
    form.show()
    app.exec_()

输出:-

p5fdfcr1

p5fdfcr14#

使用PyQt5,您可以通过以下方式将QListWidget的SelectionMode设置为允许多重选择:

from PyQt5 import QtWidgets    

QtWidgets.QListWidget.setSelectionMode(2)

其中

  • 选择模式= 0 =〉无选择
  • 选择模式= 1 =〉单选
  • 选择模式= 2 =〉多重选择
  • 选择模式= 3 =〉扩展选择
  • 选择模式= 4 =〉连续选择

参考文献
在Qt Creator中,您可以在此处找到此选项:

bhmjp9jg

bhmjp9jg5#

此外,你可以使用列表理解来获取所选的项,例如

num_ITEMS=[item.text() for item in self.listWidget.selectedItems()]
7jmck4yq

7jmck4yq6#

在搜索了很长时间后,我发现他们在PyQt6中更改了这一点。现在您必须执行以下操作:

from PyQt6.QtWidgets import QListWidget, QAbstractItemView
# ... all your other imports
class MyWidget(QWidget):
def __init__(self):
    super(MyWidget, self).__init__()
    self.layout = QHBoxLayout()
    self.my_list_view = QListWidget()
    self.my_list_view.setSelectionMode(QAbstractItemView.SelectionMode.MultiSelection) # also try QAbstractItemView.SelectionMode.ExtendedSelection if you want the user to press CTRL for multiple selection

基本上,您必须从小部件导入QAbstractItemView,并使用正确的选择模式

相关问题