Как создавать приложения с графическим интерфейсом под рабочим столом Linux с помощью PyGObject — часть 1
Создание приложений в Linux может быть выполнено разными способами, но существует ограниченное количество способов, поэтому используются самые простые и наиболее функциональные языки программирования и библиотеки, поэтому мы кратко рассмотрим создание приложений под Linux. рабочий стол с помощью библиотеки GTK+ с языком программирования Python, который называется \PyGObject.
PyGObject использует GObject Introspection для создания привязки для таких языков программирования, как Python. PyGObject — это следующее поколение PyGTK, можно сказать, что PyGObject=Python + GTK3.
Сегодня мы собираемся начать серию статей о создании приложений с графическим интерфейсом пользователя (GUI) под рабочим столом Linux с использованием библиотеки GTK+ и языка PyGobject. Серия будет охватывать следующие темы:
О Питоне
Прежде всего, вы должны иметь некоторые базовые знания Python; Python — очень современный и простой в использовании язык программирования. Это один из самых известных языков программирования в мире. Используя Python, вы сможете создавать множество отличных приложений и инструментов. Вы можете пройти несколько бесплатных курсов, например, на codeacademy.com, или почитать книги о Python по адресу:
О ГТК+
GTK+ — это кроссплатформенный инструментарий с открытым исходным кодом для создания графических пользовательских интерфейсов для настольных приложений. Впервые он был запущен в 1998 году как инструментарий с графическим интерфейсом для GIMP, позже он использовался во многих других приложениях и вскоре стала одной из самых известных библиотек для создания графических интерфейсов. GTK+ выпущен под лицензией LGPL.
Создание приложений с графическим интерфейсом под Linux
Существует 2 способа создания приложений с использованием GTK+ и Python:
- Написание графического интерфейса с использованием только кода.
- Разрабатывая графический интерфейс с помощью программы \Glade, которая представляет собой инструмент RAD для простого проектирования интерфейсов GTK+, Glade создает графический интерфейс в виде XML-файла, который можно использовать с любым языком программирования для создания графического пользовательского интерфейса, после экспорта XML-файла графического интерфейса мы сможем связать XML-файл с нашей программой для выполнения нужных нам задач.
Мы объясним оба способа вкратце.
Путь только с кодом
Написание графического интерфейса только с помощью кода может быть немного сложным для программиста-новичка и очень затратным по времени, но с его помощью мы можем создавать очень функциональные графические интерфейсы для наших программ, более функциональные, чем те, которые мы создаем с помощью некоторых инструментов, таких как Glade.
#!/usr/bin/python # -*- coding: utf-8 -*- from gi.repository import Gtk class ourwindow(Gtk.Window): def __init__(self): Gtk.Window.__init__(self, title="My Hello World Program") Gtk.Window.set_default_size(self, 400,325) Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER) button1 = Gtk.Button("Hello, World!") button1.connect("clicked", self.whenbutton1_clicked) self.add(button1) def whenbutton1_clicked(self, button): print "Hello, World!" window = ourwindow() window.connect("delete-event", Gtk.main_quit) window.show_all() Gtk.main()
Скопируйте приведенный выше код, вставьте его в файл \test.py, установите разрешение 755 для файла test.py и запустите файл позже, используя \./test.py», вот что вы получите.
# nano test.py # chmod 755 test.py # ./test.py
Нажав на кнопку, вы увидите предложение \Hello, World!, распечатанное в терминале:
Позвольте мне объяснить код в подробном объяснении.
- #!/usr/bin/python: путь по умолчанию для интерпретатора Python (в большинстве случаев версии 2.7). Эта строка должна быть первой строкой в каждом файле Python.
- # -*- coding: utf-8 -*-: Здесь мы устанавливаем кодировку по умолчанию для файла, UTF-8 лучше всего, если вы хотите поддерживать неанглийские языки, оставьте это так.
- импорт Gtk из gi.repository: Здесь мы импортируем библиотеку GTK 3, чтобы использовать ее в нашей программе.
- Класс ourwindow(Gtk.Window): здесь мы создаем новый класс, который называется \ourwindow, мы также устанавливаем тип объекта класса на \Gtk.Window.
- def __init__(self): ничего нового, здесь мы определяем компоненты главного окна.
- Gtk.Window.__init__(self, title=”My Hello World Program”): мы используем эту строку, чтобы установить заголовок \My Hello World Program” на \ourwindow окно, вы можете изменить заголовок, если хотите.
- Gtk.Window.set_default_size(self, 400,325): я не думаю, что эта строка нуждается в объяснении, здесь мы устанавливаем ширину и высоту по умолчанию для нашего окна.
- Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER): с помощью этой строки мы можем установить положение окна по умолчанию, в данном случае мы устанавливаем его в центр с помощью параметра \Gtk.WindowPosition.CENTER, при желании вы можете изменить его на \Gtk.WindowPosition.MOUSE, чтобы открыть окно в позиции указателя мыши.
- button1=Gtk.Button(Hello, World!): мы создали новую Gtk.Button и назвали ее \button1, текст по умолчанию для кнопки\Hello, World!», вы можете создать любой виджет Gtk, если хотите.
- button1.connect(clicked, self.whenbutton1_clicked): здесь мы связываем сигнал \clicked с действием \whenbutton1_clicked, чтобы при нажатии кнопки активируется действие \whenbutton1_clicked.
- self.add(button1): если мы хотим, чтобы наши виджеты Gtk отображались, мы должны добавить их в окно по умолчанию, эта простая строка добавляет в окно виджет \button1, это очень необходимо сделать.
- def whenbutton1_clicked(self, button): теперь мы определяем здесь действие \whenbutton1_clicked, мы определяем, что произойдет при нажатии виджета \button1, Параметр \(self, button) важен для указания типа родительского объекта сигнала.
- печать «Hello, World!»: мне не нужно больше объяснять здесь.
- window=ourwindow(): мы должны создать новую глобальную переменную и присвоить ей класс ourwindow(), чтобы мы могли вызывать ее позже с помощью библиотеки GTK+.
- window.connect(delete-event, Gtk.main_quit): теперь мы соединяем сигнал \delete-event с действием \Gtk.main_quit, это важно для того, чтобы удалить все виджеты после того, как мы автоматически закроем окно нашей программы.
- window.show_all(): отображение окна.
- Gtk.main(): запуск библиотеки Gtk.
Вот так, легко? И очень функциональный, если мы хотим создать несколько больших приложений. Для получения дополнительной информации о создании интерфейсов GTK+ с использованием только кода вы можете посетить официальный сайт документации по адресу:
Путь дизайнера поляны
Как я сказал в начале статьи, Glade — это очень простой инструмент для создания интерфейсов, необходимых для наших программ, он очень известен среди разработчиков, и с его помощью было создано много отличных интерфейсов приложений. Этот способ называется «Быстрая разработка приложений».
Вы должны установить Glade, чтобы начать использовать его в Debian/Ubuntu/Mint:
$ sudo apt-get install glade
В RedHat/Fedora/CentOS запустите:
После того, как вы загрузите и установите программу и запустите ее, вы увидите слева доступные виджеты Gtk, нажмите на виджет \окно, чтобы создать новое окно.
Вы заметите, что создается новое пустое окно.
Теперь вы можете добавить к нему некоторые виджеты, на левой панели инструментов щелкните виджет \кнопка” и щелкните пустое окно, чтобы добавить кнопку в окно.
Вы заметите, что идентификатор кнопки — \button1. Теперь перейдите на вкладку Сигналы на правой панели инструментов, найдите сигнал \нажатие и введите\button1_clicked под ним.
Теперь, когда мы создали наш графический интерфейс, давайте экспортируем его. Щелкните меню \Файл и выберите \Сохранить, сохраните файл в своем домашнем каталоге под именем \myprogram.glade» и выйти.
Теперь создайте новый файл \test.py и введите в него следующий код.
#!/usr/bin/python # -*- coding: utf-8 -*- from gi.repository import Gtk class Handler: def button_1clicked(self, button): print "Hello, World!" builder = Gtk.Builder() builder.add_from_file("myprogram.glade") builder.connect_signals(Handler()) ournewbutton = builder.get_object("button1") ournewbutton.set_label("Hello, World!") window = builder.get_object("window1") window.connect("delete-event", Gtk.main_quit) window.show_all() Gtk.main()
Сохраните файл, предоставьте ему права доступа 755, как раньше, и запустите его, используя \./test.py, и вот что вы получите.
# nano test.py # chmod 755 test.py # ./test.py
Нажмите на кнопку, и вы заметите, что в терминале напечатано предложение \Hello, World!.
Теперь давайте объясним новые вещи:
- класс Handler: здесь мы создаем класс под названием \Handler, который будет включать определения действий и сигналов, которые мы создаем для графического интерфейса.
- builder=Gtk.Builder(): мы создали новую глобальную переменную с именем \builder, которая представляет собой виджет Gtk.Builder, это важно для импорта файла .glade.
- builder.add_from_file(myprogram.glade): здесь мы импортируем файл \myprogram.glade, чтобы использовать его в качестве графического интерфейса по умолчанию для нашей программы.
- builder.connect_signals(Handler()): эта строка соединяет файл .glade с классом обработчика, чтобы действия и сигналы, определенные в классе \Handler, работали нормально, когда мы запускаем программу.
- ournewbutton=builder.get_object(button1): теперь мы импортируем объект \button1 из файла .glade, мы также передаем его в глобальную переменную\ournewbutton», чтобы использовать его позже в нашей программе.
- ournewbutton.set_label(Hello, World!): мы использовали метод \set.label, чтобы задать для кнопки по умолчанию текст \Hello, World! предложение.
- window=builder.get_object(window1): здесь мы вызвали объект \window1 из файла .glade, чтобы отобразить его позже в программе.
Вот и все! Вы успешно создали свою первую программу под Linux!
Конечно, есть много более сложных вещей, которые нужно сделать, чтобы создать реальное приложение, которое что-то делает, поэтому я рекомендую вам ознакомиться с документацией по GTK+ и GObject API по адресу:
- Справочное руководство по GTK+
- Справочник по Python GObject API
- Справочник по объекту PyG
Разрабатывали ли вы ранее какое-либо приложение для рабочего стола Linux? Какой язык программирования и инструменты использовались для этого? Что вы думаете о создании приложений с использованием Python и GTK 3?