Не работает 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())

