Как сделать 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)