[PyQt] override className() in QMetaClass

Rafael Durán Castañeda rafadurancastaneda at gmail.com
Fri Sep 9 11:20:11 BST 2011

I think you can do something like this:

 >>> import PyQt4.QtGui as gui
 >>> def factory(name):
...     def spam(): pass
...     def yam(): pass
...     return type(name, (gui.QWidget,),{'spam':spam, 'yam': yam})
 >>> MyClass = factory('MyClass')
 >>> MyClass.__mro__
(<class '__main__.MyClass'>, <class 'PyQt4.QtGui.QWidget'>, <class 
'PyQt4.QtCore.QObject'>, <type 'sip.wrapper'>, <class 
'PyQt4.QtGui.QPaintDevice'>, <type 'sip.simplewrapper'>, <type 'object'>)

On 08/09/11 23:33, Daniel Goertzen wrote:
> Does pyqt provide a way to override the class name when deriving a 
> QObject based class?
> An example of why this is wanted:
> def my_widget_class_factory(...):
>    class temp(QWidget):
>       ...(dynamically generate class attributes and methods)
>    return temp
> All classes generated by the above function will come back with 
> className() as "temp".  This causes headaches for Designer.
> I know I can add a metaclass to mangle the class name, but I was 
> wondering there was an easier way (ie, does QObject's metaclass 
> provided a way to rename the class?)
> Thanks,
> Dan.
> _______________________________________________
> PyQt mailing list    PyQt at riverbankcomputing.com
> http://www.riverbankcomputing.com/mailman/listinfo/pyqt

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20110909/bdf01108/attachment-0001.html>

More information about the PyQt mailing list