Drew
Drew

Reputation: 2663

Trouble Updating Label Text

Environment:

-

Although I know the method I need to use to update a label's text (label.set_text("string")), I'm having trouble obtaining the label object in the python code.

Here's what my code looks like:

#!/usr/bin/python
# Filename: HelloPython.py
# Author: Andrew Hefley Carpenter
# Date: 18 August 2010

import sys
import gtk

class HelloPython:

    def on_window_destroy(self, widget, data=None):
        gtk.main_quit()

    def __init__(self):

        builder = gtk.Builder()
        builder.add_from_file("HelloPython.xml") 

        self.window = builder.get_object("window")
        builder.connect_signals(self)   

    def on_button1_clicked(self, widget):

        print "Hello World!"  
        widget.set_label("Hello World!")
        #I'd like to update 

if __name__ == "__main__":
    editor = HelloPython()
    editor.window.show()
    gtk.main()

End goal: I want to update "Object X" using it's set_text method after the callback to "Object Y" (in this case button1) as handled by "on_button1_clicked"

Upvotes: 5

Views: 5141

Answers (1)

anthony
anthony

Reputation: 41118

The widget parameter to on_button1_clicked is a gtk.Button, not a gtk.Label. gtk.Button has a convenience api method called set_label().

This only works if the child of Gtk.Button is a gtk.Label. This is the default when creating a new button in Glade-3, but if you've changed the contents of the button, this will not work and you'll need a reference to the gtk.Label widget itself.

EDIT (code to update the label):

class HelloPython:
    def on_window_destroy(self, widget, data=None):
        gtk.main_quit()

    def __init__(self):
        builder = gtk.Builder()
        builder.add_from_file("HelloPython.xml") 
        self.window = builder.get_object("window")
        self.label = builder.get_object("label1") # get reference to the label
        builder.connect_signals(self)   

    def on_button1_clicked(self, widget):
        #widget.set_label("Hello World!") this would set the button's text
        self.label.set_text("Hello World!") # this sets the label's text

Upvotes: 3

Related Questions