Михаиллл
10 сентября 2020 г. 22:41

Как в PyQt в TableView включить активность чекбоксов

Добрый день.
В PyQt в TableModel сдела чекбоксы с помощью такого флага (столбец 1):

  1. def data(self, index, role=None):
  2. if index.column() == 0 and role == 0:
  3. return self.id[index.row()]
  4. elif index.column() == 1 and role == 10:
  5. return self.checked[index.row()]
  6. elif index.column() == 2 and role == 0:
  7. return self.nameCd[index.row()]
  8. return None

Скажите пожалуйста, как включить возможность нажимать по чекбоксу?
Если делаю так, то программа вылетает на предпоследней строчке

  1. def flags(self, index):
  2. result = super(ModelCdViewer, self).flags(index)
  3. print(result)
  4. if index.column() == 1 :
  5. result |= Qt.ItemIsUserCheckable
  6. return result

Это тоже не помогло

  1. self.ui.tableView.setEditTriggers(QtWidgets.QAbstractItemView.AllEditTriggers)
1

Вам это нравится? Поделитесь в социальных сетях!

2
Михаиллл
  • 11 сентября 2020 г. 13:50

Так бочти работает, но после изменения значений программа вылетает

  1. def flags(self, index):
  2. result = super(ModelCdViewer, self).flags(index)
  3. if index.column() == 1 :
  4. result |= QtCore.Qt.ItemIsUserCheckable
  5. # result |= QtCore.Qt.ItemIsEditable
  6. return result
    Михаиллл
    • 11 сентября 2020 г. 14:14
    • Ответ был помечен как решение.

    Так работает

    1. def flags(self, index):
    2. result = super(ModelCdViewer, self).flags(index)
    3. if index.column() == 1 :
    4. result |= QtCore.Qt.ItemIsUserCheckable
    5. # result |= QtCore.Qt.ItemIsEditable
    6. return result
    7.  
    8. def setData(self, index, value, role=QtCore.Qt.EditRole):
    9. if not index.isValid():
    10. return False
    11.  
    12. if index.column() == 1:
    13. print(value)
    14. print(self.checked[index.row()])
    15.  
    16. if self.checked[index.row()]:
    17. self.checked[index.row()] = False
    18. else:
    19. self.checked[index.row()] = True
    20.  
    21. print(self.checked[index.row()])
    22.  
    23. # self.checked[index.row()] = value
    24. # self.dataChanged().emit(index, index)
    25. return True
    26.  
    27. return False

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь
      • Последние комментарии
      • IscanderChe
        12 апреля 2025 г. 17:12
        Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
      • AK
        1 апреля 2025 г. 11:41
        Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
      • Evgenii Legotckoi
        9 марта 2025 г. 21:02
        К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
      • VP
        9 марта 2025 г. 16:14
        Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
      • ИМ
        22 ноября 2024 г. 21:51
        Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…