Your problem can be tackled from various angles, but it all runs down to this: You should not need to make the instance delete itself. More precisely, you should not need to make the instance aware of when it ought to be deleted, the fact that it should not delete itself *aside* (and the fact aside that Python does GC and del()-ing an instance is a rare exception.)
As you provided only little insight into the nature of your project and your code, I am not sure what specifically to recommend, but it seems that it would be more appropriate if you had a viewer class that does the actual showing, and separate the file processing into a different class or free code outside of the viewer class, and manage the lifecycle of the viewer class by the main program code (the 'controller' code). In fact, to be honest, your idea of how this should work looks pretty jumbled up and I recommend and advise that you read up in a Python tutorial to get familiar with OOP programming. On Thu, May 7, 2009 at 12:55 AM, dave mcodes <[email protected]> wrote: > Hi folks, > > First off, I'm a noob to OOP, Python and PyGTK, so please forgive a little > ignorance here. > > I've built a simple image viewer class and I'm trying to figure out how to > gracefully destroy an instance of it from within __init__ depending on > weather or not a given condition exists. > > Logic is basically thus: > > class viewer: > if no files: > post a dialog box > upon "OK" button click, bail out and kill this instance > else: > finish creating viewer objects > start an event loop and do something upon button press event. > > > The trouble I have is that I can block the main event loop with run(), but > I can't figure out how to bail out gracefully and destroy this instance. I'm > not sure if del(self) is appropriate. See snip below. > > Further, I'm also not sure if it's appropriate to nest gtk_main() here > since it prevents me from handling any top level events until I exit this > instance. I read somewhere that it's bad form to reference the parent from > within a child class instance (and therefore, I should not try to register a > callback from my main app in this viewer instance). > > Any thoughts, comments or references are much appreciated, > > Dave > > =========================== > > class Picviewer: > def __init__(self): > > print "Setting up..." > self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) > self.window.connect("button-press-event", self.button_press_event ) > self.window.set_border_width(0) > > # Retrieve photos from the photo directory > self.photo_list = self.make_photo_list() > > print "self.photo_list: ", self.photo_list > > if self.photo_list.__len__() == 0: > print "photo_length = 0" > dialog = gtk.Dialog("mybox", self.window.get_toplevel() , > gtk.DI > ALOG_MODAL | \ > gtk.DIALOG_DESTROY_WITH_PARENT,\ > (gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)) > dialog.vbox.pack_start(gtk.Label(' Error! \nNo photos found: > \n\ > Possible Cause: \n\ > No .jpg, .gif, .png, .bmp files found. \n\ > Picture Directory does not exist ')) > dialog.show_all() > dialog.run() > dialog.destroy() > > <<<<not sure what to do here?>>> del(self) ? > > else: > > self.viewer = gtkimageview.ImageView() > self.viewer.set_black_bg(True) > self.viewer.set_show_frame(False) > self.window.add(self.viewer) > self.window.fullscreen() > self.window.show_all() > self.viewer.show() > > ... [stuff removed for brevity]... > > def button_press_event(self, widget, event, data=None): > self.window.destroy() > gobject.source_remove(self.timer_id) > gtk.main_quit() > > > def main(self): > gtk.main() > > > _______________________________________________ > pygtk mailing list [email protected] > http://www.daa.com.au/mailman/listinfo/pygtk > Read the PyGTK FAQ: http://faq.pygtk.org/ > -- Please note that according to the German law on data retention, information on every electronic information exchange with me is retained for a period of six months. [Bitte beachten Sie, dass dem Gesetz zur Vorratsdatenspeicherung zufolge jeder elektronische Kontakt mit mir sechs Monate lang gespeichert wird.]
_______________________________________________ pygtk mailing list [email protected] http://www.daa.com.au/mailman/listinfo/pygtk Read the PyGTK FAQ: http://faq.pygtk.org/
