Поиск по сайту:

Как создавать приложения с графическим интерфейсом под Linux Desktop с использованием PyGObject. Часть 1


Создавать приложения в Linux можно разными способами, но количество способов ограничено, поэтому используются самые простые и функциональные языки программирования и библиотеки, поэтому мы кратко рассмотрим создание приложений под Linux. рабочего стола, используя библиотеку GTK+ с языком программирования Python, который называется «PyGObject».

PyGObject использует интроспекцию GObject для создания привязки для таких языков программирования, как 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:

  1. Написание графического интерфейса только с использованием кода.
  2. Проектирование графического интерфейса с помощью программы «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!», распечатанное в терминале:

Позвольте мне объяснить код в подробном объяснении.

  1. #!/usr/bin/python: путь по умолчанию для интерпретатора Python (в большинстве случаев версии 2.7). Эта строка должна быть первой строкой в каждом файле Python.
  2. # -*- кодировка: utf-8 -*-: Здесь мы устанавливаем кодировку по умолчанию для файла. UTF-8 лучше всего подходит, если вы хотите поддерживать неанглийские языки, оставьте ее такой. .
  3. из gi.repository import Gtk: здесь мы импортируем библиотеку GTK 3, чтобы использовать ее в нашей программе.
  4. Класс наше окно (Gtk.Window): здесь мы создаем новый класс, который называется «наше окно», мы также устанавливаем тип объекта класса «Gtk.Window».
  5. def __init__(self): Ничего нового, здесь мы определяем компоненты главного окна.
  6. Gtk.Window.__init__(self, title=”My Hello World Program”): мы используем эту строку, чтобы установить заголовок «My Hello World Program» для окна «ourwindow», вы можете изменить название, если хотите.
  7. Gtk.Window.set_default_size(self, 400,325): Не думаю, что эта строка нуждается в пояснении, здесь мы устанавливаем ширину и высоту по умолчанию для нашего окна.
  8. Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER): Используя эту строку, мы сможем установить положение окна по умолчанию, в данном случае мы устанавливаем его в центр. используя параметр «Gtk.WindowPosition.CENTER», если хотите, вы можете изменить его на «Gtk.WindowPosition.MOUSE», чтобы открыть окно в позиции указателя мыши.
  9. button1=Gtk.Button(“Hello, World!”): мы создали новый Gtk.Button и назвали его «button1», текст по умолчанию для кнопки — «Hello, World! », вы можете создать любой виджет Gtk, если хотите.
  10. button1.connect(“clicked”, self.whenbutton1_clicked): здесь мы связываем сигнал «clicked» с действием «whenbutton1_clicked», чтобы при нажатии кнопки выполнялось действие «whenbutton1_clicked». активирован.
  11. self.add(button1): если мы хотим, чтобы наши виджеты Gtk отображались, нам нужно добавить их в окно по умолчанию, эта простая строка добавляет виджет «button1» в окно, очень необходимо сделай это.
  12. def Whenbutton1_clicked(self, button): Теперь мы определяем здесь действие «whenbutton1_clicked», мы определяем, что произойдет при нажатии виджета «button1», «(self, button ) ” важен для указания типа родительского объекта сигнала.
  13. print «Hello, World!»: здесь мне не нужно больше объяснять.
  14. window=Ourwindow(): нам нужно создать новую глобальную переменную и установить для нее класс Ourwindow(), чтобы мы могли вызывать ее позже с помощью библиотеки GTK+.
  15. window.connect("delete-event", Gtk.main_quit): Теперь мы соединяем сигнал "delete-event" с действием "Gtk.main_quit", это важно для удаления все виджеты после автоматического закрытия окна программы.
  16. window.show_all(): отображение окна.
  17. Gtk.main(): запуск библиотеки Gtk.

Вот и все, легко, не так ли? И очень функциональный, если мы хотим создать большие приложения. Для получения дополнительной информации о создании интерфейсов GTK+ с использованием только кода вы можете посетить официальный сайт документации по адресу:

Учебные пособия по Python GTK3

Путь дизайнера Glade

Как я сказал в начале статьи, Glade — это очень простой инструмент для создания интерфейсов, необходимых для наших программ, он очень известен среди разработчиков, и с его помощью было создано множество замечательных интерфейсов приложений. Этот способ называется «Быстрая разработка приложений».

Чтобы начать использовать его, вам необходимо установить Glade, запустив Debian/Ubuntu/Mint:

sudo apt­-get install glade

В RedHat/Fedora/CentOS запустите:

yum install glade

После загрузки и установки программы и ее запуска вы увидите доступные виджеты Gtk слева. Нажмите на виджет «window», чтобы создать новое окно.

Вы заметите, что создается новое пустое окно.

Теперь вы можете добавить к нему несколько виджетов: на левой панели инструментов щелкните виджет «кнопка» и щелкните пустое окно, чтобы добавить кнопку в окно.

Вы заметите, что идентификатор кнопки — «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!».

Теперь давайте объясним новые вещи:

  1. Обработчик класса. Здесь мы создаем класс под названием «Handler», который будет включать определения действий и сигналов, которые мы создаем для графического интерфейса.
  2. builder=Gtk.Builder(): мы создали новую глобальную переменную под названием «builder», которая представляет собой виджет Gtk.Builder. Это важно для импорта файла .glade.
  3. builder.add_from_file("myprogram.glade"): Здесь мы импортируем файл "myprogram.glade", чтобы использовать его в качестве графического интерфейса по умолчанию для нашей программы.
  4. builder.connect_signals(Handler()): эта строка соединяет файл .glade с классом обработчика, поэтому действия и сигналы, которые мы определяем в классе «Handler», работают нормально при запуске программы. .
  5. ournewbutton=builder.get_object(“button1”): Теперь мы импортируем объект «button1» из файла .glade, а также передаем его в глобальную переменную «ournewbutton», чтобы использовать его. далее в нашей программе.
  6. ournewbutton.set_label(«Hello, World!»): мы использовали метод «set.label», чтобы установить текст кнопки по умолчанию «Hello, World! " предложение.
  7. window=builder.get_object("window1"): здесь мы вызвали объект «window1» из файла .glade, чтобы отобразить его позже в программе.

Вот и все! Вы успешно создали свою первую программу под Linux!

Конечно, чтобы создать настоящее приложение, которое что-то делает, нужно сделать гораздо более сложные вещи, поэтому я рекомендую вам заглянуть в документацию GTK+ и GObject API по адресу:

  1. Справочное руководство GTK+
  2. Справочник по API Python GObject
  3. Справочник по PyGObject

Разрабатывали ли вы раньше какие-либо приложения для рабочего стола Linux? Какой язык программирования и инструменты использовались для этого? Что вы думаете о создании приложений с использованием Python и GTK 3?