[PyGTK] Singleton Window
alex goretoy
aleksandr.goretoy at gmail.com
Thu Mar 5 23:43:51 EST 2009
Correction, it's not True singleton.....
-Alex Goretoy
http://www.goretoy.com
On Thu, Mar 5, 2009 at 10:38 PM, alex goretoy
<aleksandr.goretoy at gmail.com>wrote:
> Hello All,
>
> I am trying to create a singleton window in pygtk and for the life of me
> can't seem to figure out a better way to go about doing this. The way I'm
> doing it now is to recreate the window and show it. Example code is below. I
> would much appreciate any assistance in this matter. I've googled to no
> avail. I'm hiding the child window because when I execute main_quit on the
> child it kills parent (which makes sense).
>
> My singleton hack works, but its cluncky, I am wondering if theres some
> other way(working shmingleton?).
>
> My question is this. How to create a singleton child window without hiding
> old childs(seeing as this creates many hidden childs after a while) or how
> to hide it and when showing it again also have it display all contents in
> the child window?
>
> Thank you.
>
> #!/usr/bin/env python
> import os, sys
>
> import pygtk
> pygtk.require('2.0')
> try:
> import gtk
> except:
> print >> sys.stderr, "You need to install the python gtk bindings"
> sys.exit(1)
>
>
>
> class Singleton_Test(object):
> def __init__(self):
> self.root_window = gtk.Window( type=gtk.WINDOW_TOPLEVEL )
> self.root_window.set_title("Singleton Test")
> self.root_window.connect("delete_event", lambda w,e: gtk.main_quit())
>
> self.vbox = gtk.VBox(False,0)
> self.root_window.add(self.vbox)
> self.vbox.show()
>
> self.singleton_button = gtk.Button("SINGLETON")
> self.singleton_button.connect("clicked",self.singleton_cb)
> self.vbox.pack_start(self.singleton_button,False,False,0)
>
> self.singleton_button.show()
>
> self.shmingleton_button = gtk.Button("SHMINGLETON")
> self.shmingleton_button.connect("clicked",self.shmingleton_cb)
> self.vbox.pack_start(self.shmingleton_button,False,False,0)
>
> self.shmingleton_button.show()
>
> self.create_singleton_child_window()
>
> self.root_window.show()
>
> singleton_window_count=0
> def singleton_cb(self,w):
> if self.singleton_window_count>0:
> self.create_singleton_child_window()
>
> self.singleton_child_window.show()
> print "singleton child window count is ",self.singleton_window_count
> self.singleton_window_count+=1
>
> def shmingleton_cb(self,w):
> self.singleton_child_window.show_all() #doesn't work as expected,
> neither does show
>
>
> def create_singleton_child_window(self):
> self.singleton_child_window = gtk.Window(gtk.WINDOW_TOPLEVEL)
> self.singleton_child_window.set_title("SINGLETON child")
>
> #only hiding since gtk.main_quit kills parent, any better way?
> self.singleton_child_window.connect("destroy", lambda w:
> self.singleton_child_window.hide())
> self.singleton_child_window.connect("delete_event", lambda w,e:
> self.singleton_child_window.hide())
>
> self.vbox = gtk.VBox(False, 0)
> self.singleton_child_window.add(self.vbox)
> self.vbox.show()
> self.label = gtk.Label("SINGLETON")
> self.vbox.pack_start(self.label,False,False,0)
> self.label.show()
>
> def main(self):
> gtk.main()
>
> if __name__ == "__main__":
> singleton = Singleton_Test()
> singleton.main()
>
> -Alex Goretoy
> http://www.goretoy.com
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20090305/591ac53e/attachment-0001.html>
More information about the Python-list
mailing list