[PyKDE] Qt progress example with minor glitch
Hans-Peter Jansen
hpj at urpla.net
Fri Aug 30 19:44:00 BST 2002
On Friday 30 August 2002 17:38, Phil Thompson wrote:
> Hans-Peter Jansen wrote:
> >
> > Also I forgot to mention in my former post, that QPainter.fillRect
> > doesn't allow a QColor instance as 5th parameter, unlike Qt. One has
> > always to wrap QColor with QBrush in PyQt. Phil?
>
> SIP generated code doesn't support the C++ feature of knowing it can
> call QBrush(QColor) when it needs a QBrush but is given a QColor. It's
> been on the TODO list for a long time - I may get around to it one day,
> but I think there are some "issues".
>
> Phil
I see. BTW, how do you think about supporting pythons special methods?
That is one of those things in the wxPython binding, I liked a lot.
Look, how Robin got around this (with a patched SWIG, though...):
class wxPointPtr :
def __init__(self,this):
self.this = this
self.thisown = 0
def __del__(self,miscc=miscc):
if self.thisown == 1 :
miscc.delete_wxPoint(self)
def Set(self, *_args, **_kwargs):
val = apply(miscc.wxPoint_Set,(self,) + _args, _kwargs)
return val
def asTuple(self, *_args, **_kwargs):
val = apply(miscc.wxPoint_asTuple,(self,) + _args, _kwargs)
return val
def __add__(self, *_args, **_kwargs):
val = apply(miscc.wxPoint___add__,(self,) + _args, _kwargs)
if val: val = wxPointPtr(val) ; val.thisown = 1
return val
def __sub__(self, *_args, **_kwargs):
val = apply(miscc.wxPoint___sub__,(self,) + _args, _kwargs)
if val: val = wxPointPtr(val) ; val.thisown = 1
return val
def __cmp__(self, *_args, **_kwargs):
val = apply(miscc.wxPoint___cmp__,(self,) + _args, _kwargs)
return val
def __setattr__(self,name,value):
if name == "x" :
miscc.wxPoint_x_set(self,value)
return
if name == "y" :
miscc.wxPoint_y_set(self,value)
return
self.__dict__[name] = value
def __getattr__(self,name):
if name == "x" :·
return miscc.wxPoint_x_get(self)
if name == "y" :·
return miscc.wxPoint_y_get(self)
raise AttributeError,name
def __repr__(self):
return "<C wxPoint instance at %s>" % (self.this,)
def __str__(self): return str(self.asTuple())
def __repr__(self): return str(self.asTuple())
def __len__(self): return len(self.asTuple())
def __getitem__(self, index): return self.asTuple()[index]
def __setitem__(self, index, val):
if index == 0: self.x = val
elif index == 1: self.y = val
else: raise IndexError
class wxPoint(wxPointPtr):
def __init__(self,*_args,**_kwargs):
self.this = apply(miscc.new_wxPoint,_args,_kwargs)
self.thisown = 1
Here is the corresponding SWIG source:
class wxPoint {
public:
long x;
long y;
wxPoint(long x=0, long y=0);
~wxPoint();
%addmethods {
void Set(long x, long y) {
self->x = x;
self->y = y;
}
PyObject* asTuple() {
PyObject* tup = PyTuple_New(2);
PyTuple_SET_ITEM(tup, 0, PyInt_FromLong(self->x));
PyTuple_SET_ITEM(tup, 1, PyInt_FromLong(self->y));
return tup;
}
wxPoint __add__(const wxPoint* p) {
if (! p) return *self;
return *self + *p;
}
wxPoint __sub__(const wxPoint* p) {
if (! p) return *self;
return *self - *p;
}
int __cmp__(const wxPoint* p) {
if (! p) return 1;
if (*self == *p) return 0;
return -1;
}
}
%pragma(python) addtoclass = "
def __str__(self): return str(self.asTuple())
def __repr__(self): return str(self.asTuple())
def __len__(self): return len(self.asTuple())
def __getitem__(self, index): return self.asTuple()[index]
def __setitem__(self, index, val):
if index == 0: self.x = val
elif index == 1: self.y = val
else: raise IndexError
"
};
Are there any concerns besides missing time not to take this route
to get more pythonic one day?
Hans-Peter
More information about the PyQt
mailing list