Как сделать QListWidgetItem НЕ Tristate?

У меня есть форма с QListWidget, в которую я неоднократно добавляю новые элементы. Все это выглядит безупречно, за исключением одного: предметы находятся в трех состояниях, какие бы флаги я ни проходил. Следовательно, необходимо дважды щелкнуть элемент, чтобы отметить / снять галочку. Что я должен сделать, чтобы сделать их нормальным двойным состоянием?

Виджет создан таким образом:

def _locationDetails(self):
    self.locationDetails = QListWidget()
    self.locationDetails.setFixedHeight(50)
    return self.locationDetails

В конце пункты добавляются следующим образом:

def addLocationDetail(self, text, checked = True):
    item = QListWidgetItem(text)
    item.setFlags(QtCore.Qt.ItemIsUserCheckable |
                  QtCore.Qt.ItemIsSelectable    |
                  QtCore.Qt.ItemIsEnabled)
    item.setCheckState(checked)
    self.locationDetails.addItem(item)

Код, с помощью которого я вызываю добавление новых элементов, гласит:

    # resolve location:
    waypoint.getLocationDetails()
    self.locationDetails.clear()
    self.addLocationDetail("location=%s"    % waypoint.location)
    self.addLocationDetail("department=%s"  % waypoint.department)
    self.addLocationDetail("country=%s"     % waypoint.country)

1 ответ

Решение

Проблема вызвана тем, что setCheckState() функция нуждается в значении из Qt::CheckState перечисление:

enum Qt:: CheckState

Это перечисление описывает состояние проверяемых элементов, элементов управления и виджетов.

Константа Значение Описание

Qt::Unchecked 0 Товар не проверен.

Qt::PartiallyChecked 1 Товар частично проверен. Элементы в иерархических моделях могут быть частично проверены, если проверены некоторые, но не все их дочерние элементы.

Qt::Checked 2 Товар проверен.

И так как вы передаете это True значение по умолчанию, оно преобразуется в 1 что соответствует Qt::PartiallyChecked,

Возможным решением является использование логического значения для соответствующего значения типа Qt::CheckState:

def addLocationDetail(self, text, checked=True):
    item = QListWidgetItem(text)
    item.setFlags(QtCore.Qt.ItemIsUserCheckable |
                  QtCore.Qt.ItemIsSelectable    |
                  QtCore.Qt.ItemIsEnabled)
    item.setCheckState(QtCore.Qt.Checked if checked else QtCore.Qt.Unchecked)
    self.locationDetails.addItem(item)
Другие вопросы по тегам