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
-- http://mail.python.org/mailman/listinfo/python-list