Не понимаю ошибку в PyCharm
Работаю на PyCharm, пишу определённое приложение. Привожу код
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QComboBox
class Main_widget(QWidget):
def __init__(self):
super().__init__()
self.ui()
def ui(self):
self.b_list = 0
self.act_btn = QPushButton()
self.act_btn.clicked.connect(self.add_combo)
def open_win(self, obj):
if obj.currentText() == 'delay':
# ...
def add_combo(self):
exec('self.act_b' + str(self.b_list) + ' = QComboBox()')
exec('self.act_b' + str(self.b_list) + '.activated.connect(lambda: self.open_win(self.act_b' + str(self.b_list) + '))')
if __name__ == '__main__':
app = QApplication([])
win = Main_widget()
app.exec_()
После добавления строки exec('self.act_b' + str(self.b_list) + '.activated.connect(lambda: self.open_win(self.act_b' + str(self.b_list) + '))')
начало выдавать ошибку
Traceback (most recent call last):
File "string", line 1, in lambda
NameError: name 'self' is not defined
Предварительно переменную self.act_b0 я обозначил. Помогите разобраться
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Не используйте нумерованные поля объекта (или нумерованные переменные), используйте просто список. Должно получиться примерно так:
class Main_widget(QWidget):
def __init__(self):
super().__init__()
self.ui()
def ui(self):
self.act_b = []
self.act_btn = QPushButton()
self.act_btn.clicked.connect(self.add_combo)
def open_win(self, obj):
if obj.currentText() == 'delay':
...
def add_combo(self):
combo = QComboBox()
combo.activated.connect(lambda: self.open_win(combo))
self.act_b.append(combo)
Обращение к конкретному комбо в списке - просто по индексу, типа self.act_b[0]
, без всех этих exec
.