Python 更新标签文本时出现问题

Python 更新标签文本时出现问题,python,user-interface,gtk,pygtk,Python,User Interface,Gtk,Pygtk,环境: 使用Glade3构建接口 后端是使用GTK+Builder库用Python编写的 - 虽然我知道更新标签文本(label.set_text(“string”)所需的方法,但在python代码中获取标签对象时遇到了问题 我的代码是这样的: #!/usr/bin/python # Filename: HelloPython.py # Author: Andrew Hefley Carpenter # Date: 18 August 2010 import sys import gtk

环境:

  • 使用Glade3构建接口
  • 后端是使用GTK+Builder库用Python编写的
-

虽然我知道更新标签文本(label.set_text(“string”)所需的方法,但在python代码中获取标签对象时遇到了问题

我的代码是这样的:

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

最终目标:我想在回调“对象Y”(在本例中为button1)后使用其set_text方法更新“对象X”,正如“on_button1_clicked”所处理的那样。

on_button1_clicked的小部件参数是一个gtk.Button,而不是gtk.Label。Button有一个方便的api方法,名为set_label()

仅当Gtk.Button的子项是Gtk.Label时,此选项才有效。这是在Glade-3中创建新按钮时的默认设置,但是如果您更改了按钮的内容,这将不起作用,您将需要对gtk.Label小部件本身的引用

编辑(更新标签的代码):


可以理解。容器层次结构如下:-窗口有一个子项,垂直框“2个容器”-垂直框有两个子项,按钮1和标签1-我想让label1更新,当它的兄弟,按钮1被点击。我怎样才能做到这一点/有哪些概念上的障碍阻碍我弄清楚这一点?感谢您的快速回复。啊,gtk不知道也不关心这种“兄弟”关系。您需要使用gtk.Builder.get_object()获取对标签的引用,并在该对象上调用set_text。此外,您还需要尽快摆脱使用glade默认小部件名称(button1,label1)的习惯,否则您的生活会很糟糕。非常感谢。这是一个项目的开始,该项目将通过可视化拼接连接帮助生物信息学界。
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