[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: [PyQt] Shortening multiple widget initializations to one line
From:       Matt Newell <newellm () blur ! com>
Date:       2012-12-10 16:19:05
Message-ID: 201212100819.05530.newellm () blur ! com
[Download RAW message or body]

On Sunday, December 09, 2012 11:48:18 PM Shriramana Sharma wrote:
> Hi -- recently I was trying to shorten the following overly verbose
> (IMO) lines to:
> 
> 		self . p1xSpin = QSpinBox ()
> 		self . p1ySpin = QSpinBox ()
> 		self . c1xSpin = QSpinBox ()
> 		self . c1ySpin = QSpinBox ()
> 		self . c2xSpin = QSpinBox ()
> 		self . c2ySpin = QSpinBox ()
> 		self . p2xSpin = QSpinBox ()
> 		self . p2ySpin = QSpinBox ()
> 
> to:
> 
> 		self . p1xSpin, self . p1ySpin, self . c1xSpin, self . c1ySpin,
> 		self . c2xSpin, self . c2ySpin, self . p2xSpin, self . p2ySpin,
> 		self . pHxSpin, self . pHySpin = ( QSpinBox () for i in range ( 10 ) 
)
> 
> but I got the error:
> 
> Traceback (most recent call last):
> File "./bezierview-cubic-interp.py", line 327, in <module>
> mainWindow = MainWindow ()
> File "./bezierview-cubic-interp.py", line 204, in __init__
> self . p1xSpin, self . p1ySpin, self . c1xSpin, self . c1ySpin,
> AttributeError: 'MainWindow' object has no attribute 'p1xSpin'
> 

Probably some simple error here causing the line to try to get the attribute 
instead of set it.

> > > class Y(object):                                                                \
> > > 
...     def __init__(self):
...             self.a, self.b = (QSpinBox() for a in range(2))
...                                                                                   \

> > > 
> > > y = Y()                                                                         \
> > > 

> Why is this, and is there any other method I can follow to shorten the
> tortuous list of repetitive commands for initializing multiple
> widgets?
> 

If you have a bunch of similarly named attributes then you can easily generate 
them.

> > > class X(object):
...     def __init__(self):
...             for at in ['%s%s%s' % (a,b,c) for a in ('c','p') for b in 
('x','y') for c in (1,2)]:
...                     setattr(self,at,QSpinBox())
... 
> > > x = X()
> > > x.cx1
<PyQt4.QtGui.QSpinBox object at 0x27c8440>
> > > x.cx2
<PyQt4.QtGui.QSpinBox object at 0x27c84d0>                                            \



Matt
_______________________________________________
PyQt mailing list    PyQt@riverbankcomputing.com
http://www.riverbankcomputing.com/mailman/listinfo/pyqt


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic