Light-industry-up.ru

Экосистема промышленности

PyGTK

12-07-2023

PyGTK
Тип

Разработка ПО

Автор

James Henstridge
Johan Dahlin

Разработчики

John Stowers
Dieter Verfaillie и др.

Написана на

Python, GTK+

Операционная система

UNIX-подобные, Windows

Последняя версия

2.24.0 (1 апреля 2011)

Состояние

активное

Лицензия

GNU GPL

Сайт

pygtk.org


PyGTK — набор Python-привязок для библиотеки GTK+. PyGTK является свободным ПО и распространяется на условиях GNU LGPL. Библиотека была выбрана в качестве официального инструментария разработки для программы «Ноутбук за 100 долларов».

Начиная с версии 2.8, обёртки объектов GLib вынесены в отдельную библиотеку — PyGObject.

Содержание

Пример: программа Hello World

#!/usr/bin/env python2
#-*- coding: UTF-8 -*-
 
import gtk
 
def button_clicked(button):
    print 'Hello World!'
 
def main():
        window = gtk.Window()
        window.set_default_size(240, 180)
        window.set_title('Hello World!')
        window.connect('destroy', lambda w: gtk.main_quit())
 
        button = gtk.Button('Press Me')
        button.connect('clicked', button_clicked)
        button.show()
 
        window.add(button)
        window.present()
 
        gtk.main()
 
if __name__ == '__main__':
        main()
Результат выполнения программы

Особенности сборки мусора

GTK+ реализован на языке C и имеет собственную (не интегрированную в полной мере с Python) систему учёта ссылок между GObject-объектами для удаления более не используемых GTK-объектов (то есть для обработки этих объектов системой сборки мусора GObject).

Как следствие этого — не исключены случаи, когда ссылки на Python-объекты (например, ссылки на функции обратного вызова), сохранённые внутри GTK-объектов (то есть GObject-объектах), превращаются в слабые ссылки и могут быть удалены системой сборки мусора Python.[1]

Следствием непредусмотренного программистом превращения ссылок в слабые ссылки могут стать ошибки при выполнении программы, когда, например, вызванная Callback-функция станет оперировать с неинициализированными данными (то есть с данными, очищенными сборщиком мусора Python).

Превращение ссылок в слабые ссылки не будет происходить, пока GTK-объект всё ещё описывается в Python-программе как PyGTK-объект (то есть пока алгоритм программы не исключает из области видимости ссылки на Python-объект, описывающий GTK-объект). Однако GTK-объекты, добавляя себя в качестве дочерних для других GTK-объектов, не сохраняют ссылку на своё Python-описание. Впрочем, программист может сделать это (сохранить Python-описание GTK-объекта) самостоятельно, как, например, это было сделано в описанном выше примере программы Hello World[2].

Другим способом страховки от паразитных явлений при превращении ссылок на Python-функции в слабые ссылки может быть и методология: когда GTK-объекты оперируют только со ссылками на Python-функции, которые в явном виде сохранены в области видимости Python-программы (при этом сохранять ссылки на сами PyGTK-объекты — необходимости уже нет).

См. также

Примечания

  1. ctypes — A foreign function library for Python
  2. В этом примере: переменные «window» и «button» (указывающие на Python-представление GTK-объектов) были сохранены до самого выхода из программы

Ссылки

  • Сайт PyGTK
  • Серия статей на русском языке по PyGTK


PyGTK.

© 2014–2023 light-industry-up.ru, Россия, Краснодар, ул. Листопадная 53, +7 (861) 501-67-06