Как тип string преобразовать в nonetype?
Нужно решить следующую задачу. В Qt Designer сделал интерфейс, в котором есть spinBox и двенадцать comboBox.
В зависимости от значения в spinBox часть comboBox должна деактивироваться и быть недоступна для работы.
Для этого при изменении значения в spinBox сигнал вызывает функцию, в которой есть цикл, чтобы связать значение, считанное из spinBox, с нужными именами comboBox.
Имена comboBox выглядят как comboBox_1 и т.д.
При запуске кода появляется ошибка:
"AttributeError: 'Ui_Calc_prop_mod' object has no attribute 'comboBoxName'".
Если напрямую прописать например:
self.comboBox_3.setEnabled(False)
то третий comboBox деактивируется.
Насколько я разобрался, проблема в том, что тип self.comboBoxName.setEnabled(False) должен быть Nonetype, а у меня тип comboBoxName string. Т.е. надо или comboBoxName сделать Nonetype или self.comboBoxName.setEnabled(False) сделать Nonetype.
Подскажите, пожалуйста, как это сделать? Или каким другим образом можно решить эту проблему?
from Ui_Calc_prop import*
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Calc_prop_mod(QtWidgets.QMainWindow, Ui_Calc_prop):
def __init__(self):
super().__init__()
self.setupUi(self)
self.spinBox.setValue(1)
self.spinBox.valueChanged.connect(self.chng)
def chng(self):
constituent_count = int(self.spinBox.cleanText())
for k in range(constituent_count + 1, 13):
comboBoxName = 'comboBox_' + str(k)
self.comboBoxName.setEnabled(False)
Ответы (2 шт):
from Ui_Calc_prop import*
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Calc_prop_mod(QtWidgets.QMainWindow, Ui_Calc_prop):
def __init__(self):
super().__init__()
self.setupUi(self)
self.spinBox.setValue(1)
self.spinBox.valueChanged.connect(self.chng)
def chng(self):
constituent_count = int(self.spinBox.cleanText())
for k in range(constituent_count + 1, 13):
comboBoxName = 'comboBox_' + str(k)
comboboxfind = self.findChild(QtGui.QComboBox, comboBoxName)
comboboxfind.setEnabled(False)
Вы не предоставили минимально-воспроизводимый пример, это не хорошо.
Учитывая что это ваш ПЕРВЫЙ вопрос, я покажу вам один из возможных вариантов.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
# ??? from Ui_Calc_prop import *
class Ui_Calc_prop_mod(QtWidgets.QMainWindow): # , Ui_Calc_prop):
def __init__(self):
super().__init__()
# self.setupUi(self)
self.num = 13
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.spinBox = QtWidgets.QSpinBox()
self.spinBox.setRange(1, self.num - 1)
self.spinBox.setValue(1)
self.spinBox.valueChanged.connect(self.chng)
vbox = QtWidgets.QVBoxLayout(self.centralwidget)
vbox.addWidget(self.spinBox)
for i in range(1, self.num):
comboBox = QtWidgets.QComboBox()
comboBox.setObjectName(f'comboBox_{i}')
vbox.addWidget(comboBox)
self.chng(1)
def chng(self, value):
for k in range(1, self.num):
if value >= k:
self.findChild(QtWidgets.QComboBox, f'comboBox_{k}').setEnabled(True)
else:
self.findChild(QtWidgets.QComboBox, f'comboBox_{k}').setEnabled(False)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
w = Ui_Calc_prop_mod()
w.show()
sys.exit(app.exec_())
