Не работает setChecked() в pyqt5

Для виджета QGroupBox есть слот setChecked(), который принимает bool. Получается что то такое:

self.groupBox.setChecked(True)

но какую бы булеву переменную я туда не подставлял ничего не меняется.

Так же я пробовал вот этот вариант, он так же не помог.

Что я делаю не так?

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
import os

class Slice(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Расчёт на срез")
        self.setFixedSize(500,200)
        self._toggle = True
        self.initUI()
        self.show()
    def initUI(self):
        self.groupBox2 = QGroupBox("Вал", self)
        self.groupBox2.setGeometry(QRect(10, 10, 360, 134))
        self.shaftDiameter = QLabel('Диаметр вала, мм',self.groupBox2)
        self.shaftDiameter.setGeometry(QRect(20, 25, 200, 25))
        self.shaftDiameterC = QLineEdit(self.groupBox2)
        self.shaftDiameterC.setGeometry(QRect(175, 25, 140, 25))
        self.torque = QLabel('Крутящий момент в H*мм',self.groupBox2)
        self.torque.setGeometry(QRect(20, 65, 200, 25))
        self.torqueC = QLineEdit(self.groupBox2)
        self.torqueC.setGeometry(QRect(175, 65, 140, 25))
        self.calculation = QPushButton('Расчитать',self)
        self.calculation.setGeometry(QRect (10, 150, 100, 35))

        self.groupBox2.setChecked(self._toggle)

        self.calculation.pressed.connect(self.raschet)

    @pyqtSlot()
    def raschet(self):
        self._toggle = not self._toggle
        self.groupBox2.setChecked(self._toggle)

if __name__ == '__main__':
    # для списоков аргументов командной строки
    App = QApplication(sys.argv)
    # Конструктор
    window = Slice()
    # Реакция на крестик
    sys.exit(App.exec())

Ответы (1 шт):

Автор решения: S. Nick

я отметил что вам надо добавить:

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
import os

class Slice(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Расчёт на срез")
        self.setFixedSize(500,200)
        self._toggle = True
        self.initUI()
        self.show()
        
    def initUI(self):
        self.groupBox2 = QGroupBox("Вал", self)
        self.groupBox2.setGeometry(QRect(10, 10, 360, 134))
        
        self.shaftDiameter = QLabel('Диаметр вала, мм',self.groupBox2)
        self.shaftDiameter.setGeometry(QRect(20, 25, 200, 25))
        self.shaftDiameterC = QLineEdit(self.groupBox2)
        self.shaftDiameterC.setGeometry(QRect(175, 25, 140, 25))
        
        self.torque = QLabel('Крутящий момент в H*мм',self.groupBox2)
        self.torque.setGeometry(QRect(20, 65, 200, 25))
        self.torqueC = QLineEdit(self.groupBox2)
        self.torqueC.setGeometry(QRect(175, 65, 140, 25))
        
        self.calculation = QPushButton('Отключить',self)
        self.calculation.setGeometry(QRect (10, 150, 100, 35))

        self.groupBox2.setChecked(self._toggle)

        self.calculation.pressed.connect(self.raschet)

    @pyqtSlot()
    def raschet(self):
        self._toggle = not self._toggle
        self.groupBox2.setChecked(self._toggle)
        #print(f'self._toggle -> {self._toggle}')
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv        
        if self._toggle:
            self.shaftDiameterC.setEnabled(True)
            self.torqueC.setEnabled(True)
            self.calculation.setText("Отключить")
        else:
            self.shaftDiameterC.setEnabled(False)
            self.torqueC.setEnabled(False)           
            self.calculation.setText("Включить")
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        

if __name__ == '__main__':
    # для списоков аргументов командной строки
    App = QApplication(sys.argv)
    # Конструктор
    window = Slice()
    # Реакция на крестик
    sys.exit(App.exec())

введите сюда описание изображения


Update

Получается для QGroupBox(), setEnabled не работает?

Работает, только использовать надо так:

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
import os

class Slice(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Расчёт на срез")
        self.setFixedSize(500,200)
        self._toggle = True
        self.initUI()
        self.show()
        
    def initUI(self):
        self.groupBox2 = QGroupBox("Вал", self)
        self.groupBox2.setGeometry(QRect(10, 10, 360, 134))
        
        self.groupBox2.setChecked(self._toggle)                          # +++
        self.groupBox2.toggled.connect(self.on_of_groupBox2)             # +++
        
        
        self.shaftDiameter = QLabel('Диаметр вала, мм',self.groupBox2)
        self.shaftDiameter.setGeometry(QRect(20, 25, 200, 25))
        self.shaftDiameterC = QLineEdit(self.groupBox2)
        self.shaftDiameterC.setGeometry(QRect(175, 25, 140, 25))
        
        self.torque = QLabel('Крутящий момент в H*мм',self.groupBox2)
        self.torque.setGeometry(QRect(20, 65, 200, 25))
        self.torqueC = QLineEdit(self.groupBox2)
        self.torqueC.setGeometry(QRect(175, 65, 140, 25))
        
        self.calculation = QPushButton('Отключить',self)
        self.calculation.setGeometry(QRect (10, 150, 100, 35))
        self.calculation.pressed.connect(self.raschet)

    @pyqtSlot()
    def raschet(self):
        self._toggle = not self._toggle
        self.groupBox2.toggled.emit(self._toggle)                        # +++

    def on_of_groupBox2(self, value):                                    # +++
#        print(f'value = {value}')
        if value:      
            self.shaftDiameterC.setEnabled(True)
            self.torqueC.setEnabled(True)
            self.calculation.setText("Отключить")
        else:
            self.shaftDiameterC.setEnabled(False)
            self.torqueC.setEnabled(False)           
            self.calculation.setText("Включить")        
        

if __name__ == '__main__':
    # для списоков аргументов командной строки
    App = QApplication(sys.argv)
    # Конструктор
    window = Slice()
    # Реакция на крестик
    sys.exit(App.exec())

введите сюда описание изображения

→ Ссылка