On Mar 7, 2009, at 1:22 PM, alex goretoy wrote:

I apologize for reposting this....I just never received an answer from the pythonlist(which makes sense, since It was intended for pygtk list )

Please, how to make shmingleton show contents again when re-opening window(hide(), then show() or show_all()) without recreating it? does GC run on the destroyed object if I destroy() the window? If so , then that means I have to recreate it and my options are to hide() then show(), but how to get contents back?

There seems to be not alot of content on this subject on the net.

I use a delete handler that calls hide then returns True. That way the widget isn't destroyed and I can then just call show when the dialog needed to be displayed again.



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()) #or destroy() self.singleton_child_window.connect("delete_event", lambda w,e: self.singleton_child_window.hide()) #or destroy()

    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



_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

--
Steve McClure
[email protected]

_______________________________________________
pygtk mailing list   [email protected]
http://www.daa.com.au/mailman/listinfo/pygtk
Read the PyGTK FAQ: http://faq.pygtk.org/

Reply via email to