Qt.CheckState.Checked!= 2 и Qt.CheckState.Checked!= 0

В документации PyQt6 сказано, что Qt.CheckState.Unchecked == 0 и Qt.CheckState.Checked == 2.

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

Вот код программы:

from PyQt6.QtCore import Qt
from PyQt6.QtWidgets import QApplication, QMainWindow, QCheckBox


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.setWindowTitle("My App")

        self.widget = QCheckBox("CB")
        self.widget.setCheckState(Qt.CheckState.Checked)
        self.widget.stateChanged.connect(self.print_state)

        self.setCentralWidget(self.widget)

    def print_state(self, state):
        print(state)
        print(state == Qt.CheckState.Unchecked)


if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec()

Но когда я нажимаю на флажок, отображается следующее:

0
False
2
False
0
False
2
False

Почему?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы сравниваете int (значение, отправленное сигналом stateChanged) и enum (Qt.CheckState.Unchecked), поэтому его нельзя сравнивать напрямую. Решение состоит в том, чтобы преобразовать целое число в перечисление:

def print_state(self, state):
    print(Qt.CheckState(state) == Qt.CheckState.Unchecked)

Можно еще проверить state == Qt.CheckState.Unchecked.value

shao.lo 08.05.2022 15:59

Кстати, я протестировал тот же код, но с PySide6, и он сработал.

Mus1k 08.05.2022 16:07

@ shao.lo То же самое.

eyllanesc 08.05.2022 16:11

Другие вопросы по теме