В документации 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
Почему?






Проблема в том, что вы сравниваете int (значение, отправленное сигналом stateChanged) и enum (Qt.CheckState.Unchecked), поэтому его нельзя сравнивать напрямую. Решение состоит в том, чтобы преобразовать целое число в перечисление:
def print_state(self, state):
print(Qt.CheckState(state) == Qt.CheckState.Unchecked)
Кстати, я протестировал тот же код, но с PySide6, и он сработал.
@ shao.lo То же самое.
Можно еще проверить
state == Qt.CheckState.Unchecked.value