pyqt: Показать все значения, присутствующие в QListWidget, как выбранные для пользователя - PullRequest
0 голосов
/ 03 октября 2018

Я много искал, но не могу найти решение для этого.

У меня есть QListWidget, который будет заполнять список значений.Мне нужно реализовать «выбрать все» в качестве поведения по умолчанию в списке.

Я уже использовал MultiSelection, и это хорошо работает, но нужно избегать нажатия на каждый элемент в случае, если пользователь захочет это сделатьобновление всех перечисленных элементов.

Может кто-нибудь помочь мне понять, как это сделать?

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

Насколько я понимаю, вы хотите реализовать функцию, которая выбирает все элементы, решение состоит в том, чтобы выполнить итерацию, используя setSelected() метод QListWidget, как показано ниже:

import sys
from PyQt4 import QtCore, QtGui


class ListWidget(QtGui.QListWidget):
    def __init__(self, parent=None):
        super(ListWidget, self).__init__(parent)
        self.setSelectionMode(QtGui.QListWidget.MultiSelection)

    @QtCore.pyqtSlot()
    def selectAll(self):
        for i in range(self.count()):
            it = self.item(i)
            if it is not None:
                it.setSelected(True)

    @QtCore.pyqtSlot()
    def clearSelection(self):
        for i in range(self.count()):
            it = self.item(i)
            if it is not None:
                it.setSelected(False)


class Widget(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Widget, self).__init__(parent)

        lay = QtGui.QVBoxLayout(self)

        button_sel = QtGui.QPushButton("Select All")
        button_unsel = QtGui.QPushButton("Clear Selection")

        self.list_widget = ListWidget()

        for letter in "ABCDEFGHIJKLMNOPQRSTUVWXYZ":
            it = QtGui.QListWidgetItem(letter)
            self.list_widget.addItem(it)

        button_sel.clicked.connect(self.list_widget.selectAll)
        button_unsel.clicked.connect(self.list_widget.clearSelection)

        lay.addWidget(button_sel)
        lay.addWidget(button_unsel)
        lay.addWidget(self.list_widget)     


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())
0 голосов
/ 03 октября 2018

Использование QtWidgets.QAbstractItemView.ExtendedSelection

Когда пользователь выбирает элемент обычным способом, выбор очищается и выбирается новый элемент.Однако, если пользователь нажимает клавишу Ctrl при нажатии на элемент, выбранный элемент переключается, а все остальные элементы остаются без изменений.Если пользователь нажимает клавишу Shift при щелчке элемента, все элементы между текущим элементом и выбранным элементом выбираются или не выбираются в зависимости от состояния выбранного элемента.Несколько элементов можно выбрать, перетаскивая мышь над ними.

import sys
from PyQt5 import QtWidgets

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)

    w = QtWidgets.QListWidget()
    for i in range(12):
        w.addItem('Item {}'.format(i))

    w.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)  

    #w.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)  

    w.show()
    sys.exit(app.exec_())
...