2010-08-18 114 views
4

環境:順利更新標籤文本

  • 使用Glade3內置接口。
  • 後端是使用GTK + Builder庫以Python編寫的。

-

雖然我知道我需要使用更新,我無法獲得在Python代碼中的標籤對象標籤的文本(label.set_text(「字符串」))的方法。

這裏是我的代碼如下所示:

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

最終目標:我想更新「對象X」用它的回調「對象Y」(在這種情況下按鈕1)後set_text方法,通過爲處理「on_button1_clicked」

回答

3

on_button1_clicked的widget參數是gtk.Button,而不是gtk.Label。 gtk.Button有一個方便的API方法叫做set_label()。

這隻適用於Gtk.Button的孩子是gtk.Label的情況。這是在Glade-3中創建新按鈕時的默認設置,但如果您更改了按鈕的內容,則此功能無效,您需要參考gtk.Label小部件本身。

EDIT(代碼來更新標籤):

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

理解的。容器層次如下: -Window有一個孩子,垂直框'2容器' - 垂直框有兩個孩子,button1和label1。 - 我想在label1同步時更新label1,點擊button1。我怎樣才能做到這一點/有什麼概念上的障礙阻止我去理解這一點? 感謝您的快速響應。 – Drew 2010-08-18 01:00:57

+0

啊,gtk不知道或關心這個「兄弟」關係。您需要使用gtk.Builder.get_object()獲取對該標籤的引用,並在該對象上調用set_text。 – anthony 2010-08-18 01:59:40

+0

另外,你會希望儘快擺脫使用glade的默認widget名稱(button1,label1)的習慣,否則你的生活會很糟糕。 – anthony 2010-08-18 02:04:03