В среде быстрой разработки пользовательских интерфейсов Glade для придания виджетам (графическим объектам) интерактивных свойств необходимо определить обработчики сигналов (методы для событий).
Запустите редактор Glade, создайте новый проект HelloWorld.glade и новое окно mainWindow. Для окна mainWindow на вкладке сигналы, в разделе GtkWidget для сигнала destroy задайте имя обработчика, например, onDestroy. В вашей программе функция onDestroy будет выполняться тогда, когда вы закроете окно mainWindow.
Сохраните проект. Теперь файл HelloWorld.glade выглядит так:
<?xml version="1.0" encoding="UTF-8"?> <!-- Generated with glade 3.22.1 --> <interface> <requires lib="gtk+" version="3.20"/> <object class="GtkWindow" id="mainWindow"> <property name="can_focus">False</property> <signal name="destroy" handler="onDestroy" swapped="no"/> <child> <placeholder/> </child> <child> <placeholder/> </child> </object> </interface>
Поправим программу HelloWorld.py
#!/usr/bin/python3 # -*- coding: utf-8 -*- import gi gi.require_version('Gtk', '3.0') from gi.repository import Gtk class Handler: def onDestroy(self, *args): print("Программа Hello World! завершена") Gtk.main_quit() builder = Gtk.Builder() builder.add_from_file("HelloWorld.glade") builder.connect_signals(Handler()) window = builder.get_object("mainWindow") window.show_all() Gtk.main()
Сохраните и запустите программу. Заметили, проблема с завершением программы исчезла? Окно программы закрывается крестиком (Х), и в терминале выполнение программы завершается.
<<< Glade Gtk Python сигналы Ω Anjuta Gtk Python >>>