PyGTK

PyGTK
Скриншот программы PyGTK
Тип разработка графического интерфейса
Авторы James Henstridge
Johan Dahlin
Разработчик сообщество
Написана на Python, C
Операционные системы Linux и др. UNIX-подобные, Windows
Последняя версия
Репозиторий gitlab.gnome.org/Archive…
Состояние активное
Лицензия GNU LGPL
Сайт pygtk.org

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

Начиная с версии 2.8, обёртки объектов GLib вынесены в отдельную библиотеку — PyGObject, которая должна полностью вытеснить PyGTK при использовании GTK+ версии 3. Хотя PyGTK является стабильной, достаточно развитой и одной из четырёх основных библиотек графического интерфейса для Python, её разработка была остановлена авторами в 2011 году[2], пользователям было рекомендовано переходить на PyGObject[3].

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

Этот пример приведён для Python версии 2.x. Другие примеры можно найти в архиве с исходными кодами PyGTK, в папке examples.

#!/usr/bin/env python
#-*- 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()
Результат выполнения программы

PyGObject

PyGObject
Скриншот программы PyGObject
Тип GTK software binding[вд], библиотека виджетов[вд], свободное и открытое программное обеспечение и Python-библиотека[вд]
Написана на Python, C
Последняя версия
Репозиторий gitlab.gnome.org/Archive…
Лицензия LGPL
Сайт preferred

PyGObject предоставляет оболочку для использования в программах Python при доступе к библиотекам GObject. GObject — это объектная система, используемая библиотеками GTK, GLib, GIO, GStreamer и другими библиотеками.

Как и сама библиотека GObject, PyGObject распространяется по лицензии GNU LGPL, поэтому подходит для использования как в свободном программном обеспечении, так и в коммерческих приложениях. Он уже используется во многих приложениях — от небольших специализированных скриптов до крупных полнофункциональных приложений.

PyGObject может динамически обращаться к любым библиотекам GObject, использующим GObject Introspection. Это устраняет необходимость в отдельных модулях, таких как PyGTK, GIO и python-gnome, для создания полноценного приложения GNOME 3.0. После добавления новой функциональности в библиотеку GObject она мгновенно становится доступной как Python API без необходимости использования промежуточного Python-склеивающего компонента.

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

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

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

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

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

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

См. также

Примечания

  1. 1 2 http://ftp.gnome.org/pub/GNOME/sources/pygtk/2.24/
  2. Summerfield, M. Python in Practice: Create Better Programs Using Concurrency, Libraries, and Patterns. — Pearson Education, 2013. — P. 232. — ISBN 9780133373233.
  3. PyGTK: GTK+ for Python (официальный сайт). Дата обращения: 7 июня 2011. Архивировано 15 июня 2011 года.
  4. Это явление упоминается также и в руководстве модуля ctypes, предназначенного для прозрачного взаимодействия Python-программы с двоичным C-кодом: ctypes — A foreign function library for Python Архивная копия от 15 октября 2012 на Wayback Machine
  5. В этом примере: переменные «window» и «button» (указывающие на Python-представление GTK-объектов) были сохранены до самого выхода из программы

Литература

Ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.