On 4/24/2008 12:30 PM, Mark Summerfield wrote:
Hi,

I've written a very short introductory article on using PyQt's Undo/Redo
framework. It is available here:

http://www.informit.com/articles/article.aspx?p=1187104

(The indentation of the last line of the delete() method is wrong---I've
told InformIT so they may have fixed it by now, but if not you'll spot
it anyway.)

The article has been heavily edited for style so it doesn't read like my
usual writing, but the content is fine:-)

Hi Mark,

nice article, thanks!

A couple of caveats about lifetimes issues. In page 3:

==============================================================
    self.undoStack = QUndoStack(self)

Add this line to create an undo stack. Although it’s an instance variable, you still must give it a parent (the dialog box), so that PyQt is able to clean it up at the right time when the dialog box is destroyed.
==============================================================

Is this really true? Without a parent, the undo stack would be garbage collected whenever the Python instance is garbage collected, which is probably right at the moment the dialog is destroyed (or sometimes after, but does it really mind?).

Later:
==============================================================
    def redo(self):
        item = self.listWidget.takeItem(self.row)
        del item
==============================================================

IMO it's a little confusing because the "del item" isn't really doing anything more than it would be done one opcode later when the method exits and its locals are destroyed. In fact, calling takeItem() without binding its return value to a name achieves the same effect and it is clearer.

Thanks again for a nice article!
--
Giovanni Bajo
Develer S.r.l.
http://www.develer.com


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

Reply via email to