Невозможно изменить свойство кнопки GTK - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть код, который изменяет чувствительность 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 голосов
/ 22 декабря 2018

Изменения в виджетах главного окна не могут быть сделаны вне основного потока. Метод вопроса выполнялся в классе Handler, поэтому он не мог изменить кнопку из главного окна. Решением этой проблемы было создание вызова idle-add, который вызывает функцию в главном окне и изменяет кнопку.

Итак, в обработчике у меня есть (обратите внимание, что функция приходит из окна):

GLib.idle_add(self.window.show_dialog)

А в окне класса я поставил все функции show_dialog.

...