Как строку превратить в имя кнопки
for i in range(10):
for i1 in range(10):
if a.battleMap[i][i1]=="[O]":
#Вот здесь вся проблема, мне нужно чтобы программа понимала, что
# ("pushButton"+str(i)+str(i1)) не просто текст, а имя кнопки
self.("pushButton"+str(i)+str(i1)).setText("aaa")
Ответы (2 шт):
Автор решения: Xander
→ Ссылка
Если я правильно понял, чего вы хотите, то как-то вот так должно работать:
button_name = "pushButton" + str(i) + str(i1)
button = getattr(self, button_name)
button.setText("aaa")
Функция getattr позволяет обратится к аттрибуту объекта по его имени.
Подробнее можно прочитать, например, здесь: https://docs-python.ru/tutorial/vstroennye-funktsii-interpretatora-python/funktsija-getattr/
Автор решения: S. Nick
→ Ссылка
Вы можете использовать setattr() / getattr() для динамического создания переменных, используя строку, как показано ниже:
import sys
from PyQt5.Qt import *
class Example(QWidget):
def __init__(self):
super().__init__()
lay = QGridLayout(self)
for r in range(10):
for c in range(10):
pushButton = QPushButton(f'pushButton_{r}-{c}')
pushButton.clicked.connect(lambda ch, r=r, c=c: self.create_txt(r, c))
lay.addWidget(pushButton, r, c)
# Атрибут класса создается с помощью setattr() # !!!
setattr(self, f"pushButton_{r}-{c}", pushButton) # !!! setattr
def create_txt(self, r, c):
# использование с помощью getattr() так: # !!!
obj = getattr(self, f"pushButton_{r}-{c}") # !!! getattr
#print(f'obj = {obj} --> {obj.text()}')
if obj.text() == "Hello World":
obj.setText(f"pushButton_{r}-{c}")
else:
obj.setText("Hello World")
if __name__ == "__main__":
app = QApplication(sys.argv)
w = Example()
w.show()
sys.exit(app.exec_())
