Как создавать приложения с графическим интерфейсом под 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:
- Написание графического интерфейса только с использованием кода.
- Проектирование графического интерфейса с помощью программы «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.
- # -*- кодировка: utf-8 -*-: Здесь мы устанавливаем кодировку по умолчанию для файла. UTF-8 лучше всего подходит, если вы хотите поддерживать неанглийские языки, оставьте ее такой. .
- из gi.repository import Gtk: здесь мы импортируем библиотеку GTK 3, чтобы использовать ее в нашей программе.
- Класс наше окно (Gtk.Window): здесь мы создаем новый класс, который называется «наше окно», мы также устанавливаем тип объекта класса «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 ) ” важен для указания типа родительского объекта сигнала.
- print «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+ с использованием только кода вы можете посетить официальный сайт документации по адресу:
Учебные пособия по 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!».
Теперь давайте объясним новые вещи:
- Обработчик класса. Здесь мы создаем класс под названием «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+
- Справочник по API Python GObject
- Справочник по PyGObject
Разрабатывали ли вы раньше какие-либо приложения для рабочего стола Linux? Какой язык программирования и инструменты использовались для этого? Что вы думаете о создании приложений с использованием Python и GTK 3?