Hi,

Firstly, on a conceptual note, "self.window" is not really an accurate 
name for the glade.XML object created. It does not represent any one 
window, but rather the whole GUI (windows and widgets) created in Glade. 
You can see the glade.XML object as a factory object, taking the XML 
output from the Glade UI designer ("check.glade" in your case) as input 
and giving you the constructed widgets as output.

Having said that, there is no way for the glade.XML object to know about 
widgets that were created at run-time and not specified in its input XML 
and that is why self.window.get_widget("test") returns None. Also the 
string you passed as argument to gtk.CheckButton() is the button's label 
and not it's name. The difference is that the label is the string that 
is displayed on the button and the name is used as an internal string 
identifier for the widget.

The most common way to achieve what you are trying to do here, is to 
keep a reference to all new, custom-created widgets. So if you replace 
"button = gtk.CheckButton('test')" with "self.button = 
gtk.CheckButton('test')", you can simply do "state = 
self.button.get_active()" in your "button2_clicked()" event handler.

HTH

Walter

Daniel Roesler wrote:
> Howdy all,
>
> I'm just learning pygtk and glade, and I have a question about
> accessing widgets that were added during an called function. In my
> example, I have two buttons. The first button that adds a checkbox to
> a scrolled window area. The second button prints the activity status
> (True/False) of the checkbox.
>
> The first button works fine. However, when I push button two, python
> says "AttributeError: 'NoneType' object has no attribute
> 'get_active'". Obviously, this means that I'm not reaching the
> checkbox widget correctly.
>
> So my question, how can I get properties of a widget added after the
> initial glade file was loaded?
>
> Here's my program, and I've attached my glade file. Thanks all!
> -----------------------
> import pygtk
> import gtk
> import gtk.glade
>
> class app_gui:
>   def __init__(self):
>     self.window = gtk.glade.XML("check.glade")
>     dic = { "on_button1_clicked" : self.button1_clicked,
>             "on_button2_clicked" : self.button2_clicked,
>             "on_window1_destroy" : (gtk.main_quit) }
>     self.window.signal_autoconnect(dic)
>     return
>
>   def button1_clicked(self,widget):
>     button = gtk.CheckButton("test")
>     self.window.get_widget("scrolledwindow1").add_with_viewport(button)
>     button.show()
>     return
>
>   def button2_clicked(self,widget):
>     status = self.window.get_widget("test").get_active()
>     print status
>     return
>
> app=app_gui()
> gtk.main()
> -----------------------
>
> Avast!
> Daniel Roesler
> diaf...@gmail.com
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> pygtk mailing list   pygtk@daa.com.au
> http://www.daa.com.au/mailman/listinfo/pygtk
> Read the PyGTK FAQ: http://faq.pygtk.org/

-- 
Walter Leibbrandt                  http://translate.org.za/blogs/walter
Software Developer                                  +27 12 460 1095 (w)
Translate.org.za

Recent blogs:
* Virtaal's MVCisation
http://www.translate.org.za/blogs/walter/en/content/virtaals-mvcisation
* Things that changed the way I code
* Switching from Subversion to git


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

Reply via email to