[PyGTK] Singleton Window

alex goretoy aleksandr.goretoy at gmail.com
Thu Mar 5 23:38:56 EST 2009


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/3fdae8dc/attachment.html>


More information about the Python-list mailing list