我有一个常规的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
不幸的是,我无法使用Python特定的语法,但您不需要创建任何子类。
在创建QListWidget
之后,使用传入的多种选择类型之一调用setSelectionMode()
,可能QAbstractItemView::ExtendedSelection
就是你想要的那种。您可能需要查看此模式的一些变体。
在你的itemSelectionChanged()
信号的插槽中,调用selectedItems()
获取QList
的QListWidgetItem
指针。
对于PyQT4来说
QListWidget.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
使用多个选择在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_()
输出: -