Однажды я начал изучать PyGtk и Glade, но так и не закончил. Недавно я увидел, что PyGtk обесценивается в пользу использования самоанализа на https://wiki.ubuntu.com/MeetingLogs/appdevweek1104/GObjectIntrospection и https://wiki.ubuntu.com/MeetingLogs / appdevweek1104 / PyGI . Я решил попробовать еще раз изучить Python и Gtk, используя новый способ. Страницы, на которые я ссылаюсь, показывают, как бы вы это делали, если бы я хотел сделать GUI в коде, но мне нравится использовать Glade. Есть ли способ сделать это и по-прежнему использовать новый самоанализ?
Да, на самом деле это почти точно так же:
from gi.repository import Gtk
class Test (object):
def __init__(self):
self.builder = Gtk.Builder()
self.builder.add_from_file("test.glade")
self.builder.connect_signals(self)
def run(self, *args):
self.builder.get_object("window1").show()
Gtk.main()
def quit(self, *args):
Gtk.main_quit()
Test().run()
Многие небольшие программы потребуют мало усилий для преобразования. Вы можете начать с переключения на интроспекцию объекта с помощью следующих двух строк, а затем исправить все ошибки, просмотрев их в справочнике.
from gi.repository import Gtk as gtk
from gi.repository import Gobject as gobject
Например, gtk.RESPONSE_OK
будет называться Gtk.ResponseType.OK
, когда вы используете интроспекцию.
Имейте в виду, что вам нужен Glade 3.10 или новее для создания интерфейса GTK 3. 3.8 или старше для GTK 2. В Ubuntu пакеты называются glade
и glade-gtk2
.
Если вам нужно преобразовать (старое) приложение PyGTK в PyGI, вы должны попробовать скрипт pygi-convert, который поставляется с архивом PyGObject. Во многих случаях этого должно быть достаточно, чтобы преобразовать ваше приложение. Это также можно найти в GIT: http://git.gnome.org/browse/pygobject/tree/pygi-convert.sh
Следующая ссылка также должна помочь с некоторыми базовыми объяснениями из общих вещей, которые изменились: https://live.gnome.org/PyGObject/IntrospectionPorting
И, наконец, (очень хорошая) попытка создать учебник по PyGI: http://readthedocs.org/docs/python-gtk-3-tutorial/en/latest/index.html
Я считаю полезным взглянуть на C-документы, когда создание чего-либо: http://developer.gnome.org/gtk3/ Как только вы узнаете, как все делается в Python, это может быть очень хорошим ресурсом для вещей, которые еще не документированы. Давайте посмотрим на пример gtk.RESPONSE_OK, приведенный в другом ответе. При переходе к документации на C вы найдете следующее: http://developer.gnome.org/gtk3/3.2/GtkDialog.html#GtkResponseType Возьмите имя перечисления (GtkResponseType) и разбейте 'Gtk 'разделите точкой и добавьте тип enum без GTK_ *, так что вы получите: Gtk.ResponseType.OK
Это работает со всеми перечисленными мной перечислениями.