QListWidget和多项选择

2024-04-28 12:03:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个规则的QListWidget有几个信号和插槽hookedup。一切如我所愿。我可以更新,检索,清除等

但是用户界面不支持多重选择。

如何为QListWidget启用多个选择?我对PyQt的有限经验告诉我,我需要通过子类化创建一个定制的QListWidget。。但接下来呢?

谷歌给了我C++答案,但我在寻找Python

http://www.qtforum.org/article/26320/qlistwidget-multiple-selection.html

http://www.qtcentre.org/threads/11721-QListWidget-multi-selection


Tags: 答案orghttp信号规则wwwarticle经验
3条回答

对于PyQT4来说

QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)

不幸的是,我无法帮助使用特定于Python的语法,但您不需要创建任何子类。

创建QListWidget后,使用传入的多个选择类型之一调用setSelectionMode(),可能QAbstractItemView::ExtendedSelection就是您想要的类型。这个模式有一些变化,你可能想看看。

在您的itemSelectionChanged()信号槽中,调用selectedItems()获取QListQListWidgetItem指针。

在具有多个选择的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_()

输出:

enter image description here

相关问题 更多 >