Need better way to unpack a list

N

Nx

Is there a better solution to following problem :

I want to unpack a list into variables
the list is created at runtime and I do not know
how many items there will be , but I know not more than 25.
The list unpacks into variables which are prev. defined as
line1,line2....line25 which are actually the names of lineedit fields in
a Qt gui application and which need to be populated.
I currently use following to achieve that :

c=0
while c < len(mylinelist):
c = c + 1
if c==1:
self.line1.setText(mylinelist[c])
if c==2 :
self.line2.setText(mylinelist[c])
.
.
.
if c==25:
self.line25.setText(mylinelist[c])

I rather have someting like
pseudo code follows:

self.line+"c"+.setText(mylinelist[c])

How to do that ?

Nx
 
P

Peter Otten

Nx said:
Is there a better solution to following problem :

I want to unpack a list into variables
the list is created at runtime and I do not know
how many items there will be , but I know not more than 25.
The list unpacks into variables which are prev. defined as
line1,line2....line25 which are actually the names of lineedit fields in
a Qt gui application and which need to be populated.
I currently use following to achieve that :

c=0
while c < len(mylinelist):
c = c + 1
if c==1:
self.line1.setText(mylinelist[c])
if c==2 :
self.line2.setText(mylinelist[c])
.
.
.
if c==25:
self.line25.setText(mylinelist[c])

I rather have someting like
pseudo code follows:

self.line+"c"+.setText(mylinelist[c])

How to do that ?

for index, value in enumerate(mylinelist):
getattr(self, "line%d" % (index + 1)).setText(value)

A better approach would be to create a list of lineedit fields in the
__init__() method instead of (or in addition to) the individual lineNNN
attributes and then just write

for edit, value in zip(self.lineedits, mylinelist):
edit.setText(value)

If you want to play it safe you might also want to clear the extra
lineedits:

from itertools import repeat, chain, izip
for edit, value in izip(self.lineedits, chain(mylinelist, repeat(""))):
edit.setText(value)

Peter
 
S

Simon Brunning

I want to unpack a list into variables
the list is created at runtime and I do not know
how many items there will be , but I know not more than 25.
The list unpacks into variables which are prev. defined as
line1,line2....line25 which are actually the names of lineedit fields in
a Qt gui application and which need to be populated.
I currently use following to achieve that :

c=0
while c < len(mylinelist):
c = c + 1
if c==1:
self.line1.setText(mylinelist[c])
if c==2 :
self.line2.setText(mylinelist[c])
.
.
.
if c==25:
self.line25.setText(mylinelist[c])

I rather have someting like
pseudo code follows:

self.line+"c"+.setText(mylinelist[c])

How to do that ?

Lift would be much easier if you held your 'linenn' lineedit fields in
a list instead. Is that possible? If so, you could do something like
(untested):

for index, line in enumerate(mylinelist):
self.lines[index].setText(line)
 
N

Nx

for index, value in enumerate(mylinelist):
getattr(self, "line%d" % (index + 1)).setText(value)

Thanks ! This was the line which did it ....
The correct code snippet now reads :

# set the lineedits of the QT gui
for index,value in enumerate(self.mylinelist):
getattr(self, "lineEdit%d" % (index + 1)).setText(self.tr(value))


Nx
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top