QListWidget واختيار متعددة
-
25-09-2019 - |
سؤال
لدي منتظم QListWidget
مع زوجين من الإشارات والفتحات hookedup. كل شيء يعمل كما أتوقع. يمكنني تحديث واسترداد واضحة وما إلى ذلك.
لكن واجهة المستخدم لن تدعم اختيارات متعددة.
كيف يمكنني "تمكين" اختيارات متعددة 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_()
انتاج :-