如何在没有按钮事件的情况下设置glade标签?

时间:2018-04-16 17:36:50

标签: python gtk gtk3 glade

我正在尝试设置没有按钮事件的标签。

我希望我的应用程序在2秒后显示另一条消息。

当我运行程序时,窗口只显示最后一条消息:“再见”。

顺序好吗?我忘了什么吗?

由于

here

import gi
gi.require_version('Gtk','3.0')
from gi.repository import Gtk
from time import sleep

class form():

    def __init__(self):
        self.b = Gtk.Builder()
        self.b.add_from_file("color.glade")
        self.ventana_main = self.b.get_object("ventana_main")
        self.label = ""
        self.box = self.b.get_object("box_test") #obj creado en color.glade
        self.box_area = Gtk.Box()
        self.box.add(self.box_area)
        self.b.connect_signals(self)
        self.ventana_main.show_all()

    def label_hi(self, widget):
        self.label = Gtk.Label("Hola")
        self.box_area.add(self.label)
        self.box_area.show_all()

    def label_bye(self, widget):
        self.label.set_markup("Bye")

    def on_ventana_main_destroy(self, widget, data=None):
        Gtk.main_quit()

if __name__ == "__main__":
    f = form()
    f.label_hi(f.ventana_main)
    sleep(2)
    f.label_bye(f.ventana_main)
    Gtk.main()

1 个答案:

答案 0 :(得分:1)

在致电Gtk.main()之前,您无法进行更改,因为此时您的应用程序甚至无法显示。

如果您希望延迟2秒,请使用GLib.timeout_add_seconds,并将要修改的对象(您的标签)作为data参数传递。您需要传递的function参数是在2秒后调用的回调。在该回调中,您只需在已作为label_bye参数传递的标签上致电set_label(或您的data),即可完成。

另一件事是你应该创建标签并将其添加到构造函数中的小部件树中,而不是label_hi方法中。 label_hilabel_bye只需拨打set_label即可更改显示的消息。