我有一个代码,一旦触发动作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()
答案 0 :(得分:0)
不能在主线程之外对主窗口的小部件进行修改。
问题的方法正在Handler类中执行,因此无法从主窗口修改按钮。
解决此问题的方法是创建一个idle-add
调用,该调用在主窗口中调用一个函数并修改按钮。
所以在Handler中,我有(请注意,该函数来自窗口):
GLib.idle_add(self.window.show_dialog)
然后在窗口类中放置所有函数show_dialog
。