سؤال

لدي منتظم 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_()

انتاج :-

enter image description here

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top