PyGTK connect_signals - PullRequest
       5

PyGTK connect_signals

0 голосов
/ 01 августа 2010

Хорошо, у меня есть небольшая тестовая программа:

Это мой файл, который я загружаю через gtk.Builder

<object class="GtkWindow" id="mainWindow">
    <property name="default_width">500</property>
    <property name="default_height">250</property>
    <signal name="delete_event" handler="endProgram" />
</object>

Затем я использую это:

def endProgram ():
    print "end";

rofl = gtk.Builder();

rofl.add_from_file("mainwindow.ui");
win = rofl.get_object("mainWindow");
rofl.connect_signals("mainWindow");
win.show_all();
gtk.main();

Тем не менее, когда я запускаю его, он жалуется, что мне не хватает обработчика для объекта mainWindow.Я попытался сделать rofl.connect_signals (победа);а также

1 Ответ

2 голосов
/ 01 августа 2010

Per документы , connect_signals принимают в качестве аргумента отображение или экземпляр, а

использует интроспективные возможности Python для просмотра ключей (если объект является отображением) или атрибутов (если объект является экземпляром) и пытается сопоставить их с именами обработчиков сигналов, приведенными в описании интерфейса.Обратные вызовы, на которые ссылается каждый соответствующий ключ или атрибут, связаны с их совпадающими сигналами.

Так, например, когда вы передаете "mainwindow", который является экземпляром str, атрибуты являются, например, таким методомимена как upper, lower, isalpha и тому подобное - не имеют ничего общего с чем-либо, что вас может заинтересовать удаленно.И зачем вам атрибуты win обрабатывать сигналы?Что вы ожидаете от connect_signals до do ?

Более типичный пример использования можно найти, например, в этом SO вопросе и в этом уроке , который предлагает, среди прочего, следующий пример Python:

class TutorialTextEditor:

    def on_window_destroy(self, widget, data=None):
        gtk.main_quit()

    def __init__(self):

        builder = gtk.Builder()
        builder.add_from_file("tutorial.xml") 

        self.window = builder.get_object("window")
        builder.connect_signals(self)     

, как вы видите, здесь connect_signals используется типичным способом - то есть, передает объект (self) с on_window_destroy метод, который (путем интроспекции) будет использоваться в качестве обработчика для сигнала, возникающего при разрушении окна.

...