无法更改GTK按钮的属性

时间:2018-11-12 15:28:45

标签: python pygtk glade

我有一个代码,一旦触发动作gtk.Button,它会将False的灵敏度更改为clicked。 后台进程完成后,我想将其更改回True,但是由于某种原因它不起作用。

我要更改的函数是下面的show_dialog。打印按钮对象可以使我:

<Gtk.Button object at 0x7ff41b1bed38 (GtkButton at 0x1f0cf80)>

如图所示尝试设置标签和灵敏度不起作用。令我着迷的是,此后执行的成功对话框可以完美运行。 所有小部件都来自.glade文件。

这里我想念什么吗?

def show_dialog(self):
    button = self.builder.get_object('button')
    print(button)
    button.set_label('Changed')
    button.set_sensitive(True)
    success_dialog = self.builder.get_object('parse_success_dialog')
    success_dialog.set_transient_for(self.window)
    response = success_dialog.run()
    if response == Gtk.ResponseType.OK:
        success_dialog.destroy()

1 个答案:

答案 0 :(得分:0)

不能在主线程之外对主窗口的小部件进行修改。 问题的方法正在Handler类中执行,因此无法从主窗口修改按钮。 解决此问题的方法是创建一个idle-add调用,该调用在主窗口中调用一个函数并修改按钮。

所以在Handler中,我有(请注意,该函数来自窗口):

GLib.idle_add(self.window.show_dialog)

然后在窗口类中放置所有函数show_dialog