Reputation: 411
I'm not sure how to quite describe this problem, so pardon my subpar description.
In my code there are four separate methods are numbered from 0 to 4. I'd like to string interpolate the method call. Here's the code I have.
for i in range(0,4):
form.lineEditCh_3.insert('10')
print(form.lineEditCh_3.text())
DAC_Communication.set_voltage(channel=4, line_edit=form.lineEditCh_3, plain_text=form.plainTextEditCh_3)
form.buttonCh_3.click()
I'd like to be able to do something like:
for i in range(0,4):
form.lineEditCh_{i}.insert('10')
print(form.lineEditCh_{i}.text())
DAC_Communication.set_voltage(channel={i+1}, line_edit=form.lineEditCh_{i}, plain_text=form.plainTextEditCh_{i})
form.buttonCh_{i}.click()
How exactly would I go about doing this?
Upvotes: 1
Views: 121
Reputation: 18315
Keeping them in lists and iterating in parallel might be better but you can use getattr
:
for i in range(4):
# getting variables of interest with `getattr`
lineEditCh_i = getattr(form, f"lineEditCh_{i}")
plainTextEditCh_i = getattr(form, f"plainTextEditCh_{i}")
buttonCh_i = getattr(form, f"buttonCh_{i}")
# using them
lineEditCh_i.insert("10")
print(lineEditCh_i.text())
DAC_Communication.set_voltage(channel=i+1,
line_edit=lineEditCh_i,
plain_text=plainTextEditCh_i)
buttonCh_i.click()
The approach with lists is:
lineEditChs = [form.lineEditCh_0, form.lineEditCh_1, ...]
plainTextEditChs = [form.plainTextEditCh_0, form.plainTextEditCh_1, ...]
buttonChs = [form.buttonCh_0, form.buttonCh_1, ...]
then you'd be writing:
for i, (lineEditCh_i, plainTextEditCh_i, buttonCh_i) in enumerate(
zip(lineEditChs,
plainTextEditChs,
buttonChs)):
lineEditCh_i.insert("10")
print(lineEditCh_i.text())
DAC_Communication.set_voltage(channel=i+1,
line_edit=lineEditCh_i,
plain_text=plainTextEditCh_i)
buttonCh_i.click()
Upvotes: 2