2010-08-18 6 views
4

Environnement:Problème Étiquette Texte

  • Interface intégrée à l'aide Glade3.
  • Le backend est écrit en Python en utilisant la bibliothèque GTK + Builder.

-

Bien que je connais la méthode que je dois utiliser pour mettre à jour le texte d'une étiquette (label.set_text (« string »)), je vais avoir du mal à obtenir l'objet de l'étiquette dans le code python.

Voici ce que mon code ressemble à:

#!/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() 

objectif final: Je veux mettre à jour « Object X » en utilisant c'est la méthode set_text après le rappel à « Object Y » (dans ce cas button1) comme manipulé par "on_button1_clicked"

Répondre

3

Le paramètre widget de on_button1_clicked est un gtk.Button, pas un gtk.Label. gtk.Button a une méthode api pratique appelée set_label().

Cela ne fonctionne que si l'enfant de Gtk.Button est un gtk.Label. Ceci est la valeur par défaut lors de la création d'un nouveau bouton dans Glade-3, mais si vous avez modifié le contenu du bouton, cela ne fonctionnera pas et vous aurez besoin d'une référence au widget gtk.Label lui-même.

EDIT (code pour mettre à jour l'étiquette):

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 
+0

compréhensible. La hiérarchie du conteneur est la suivante: -La fenêtre a un enfant, la boîte verticale '2 conteneurs' -la boîte verticale a deux enfants, button1 et label1. -J'aimerais que la mise à jour de label1 se fasse quand c'est un frère, on clique sur button1. Comment puis-je atteindre ce/quels obstacles conceptuels m'empêchent de comprendre cela? Merci pour la réponse rapide. – Drew

+0

ah, gtk ne sait pas ou ne se soucie pas de cette relation "frère". vous devrez obtenir une référence à l'étiquette en utilisant gtk.Builder.get_object() et appeler set_text sur cet objet. – anthony

+0

aussi, vous aurez envie de sortir de l'habitude d'utiliser les noms de widgets par défaut glade (button1, label1) dès que possible, sinon votre vie va téter. – anthony

Questions connexes