GtkSharp#

GtkSharp — это обертка для библиотеки GTK, предназначенная для разработки десктоп приложений на C#. В свою очередь GTK — это фреймворк (написанный на Си) для создания кроссплатформенного графического интерфейса пользователя (GUI). Основным достоинством GtkSharp является его высокая степень интеграции с системными компонентами на Linux.

Основные пакеты для десктопной разработки на GTK# с использованием .Net 8.0 из репозиториев Astra Linux Special Edition#

Пакет

Версия

Репозиторий

Описание

dotnet-sdk-8.0

8.0.100-1astra~1.8.0+b2

extended

Комплект разработки ПО на .NET 8.0

pkg-config

1.8.1-1+b1

extended

Инструмент для управления библиотеками

libgtk-3-dev

3.24.38-5ubuntu1astra5

extended

Комплект разработки приложений с использованием GTK 3

При разработке приложений с использованием GtkSharp на платформе .NET рекомендуется использовать библиотеки, которые предоставляют расширенные возможности для работы с графическими интерфейсами, текстом и изображениями.

Дополнительные пакеты для десктопной разработки на GTK# с использованием .Net 8.0 из репозиториев Astra Linux Special Edition#

Пакет

Версия

Репозиторий

Описание

libcairo2-dev

1.16.0-7+b1

extended

Файлы разработки для библиотеки 2D-графики Cairo

libpango1.0-dev

1.50.12+ds-1+b1

extended

Библиотека для макетирования и рендеринга текста

libgdk-pixbuf2.0-dev

2.40.2-2+b1

extended

Библиотека манипулирования изображениями

Установка зависимостей#

Установка основных пакетов Gtk производится с помощью утилиты APT:

sudo apt install pkg-config libgtk-3-dev

В папке проекта необходимо с помощью CLI dotnet добавить пакет GtkSharp:

dotnet add package GtkSharp

Установка дополнительных пакетов GtkSharp производится с помощью утилиты APT:

sudo apt install libcairo2-dev libpango1.0-dev libgdk-pixbuf2.0-dev

Основные элементы GtkSharp#

Виджеты (Widgets):

Window: Окно.

Label: Текстовая метка.

Button: Кнопка.

Entry: Однострочное текстовое поле.

TextView: Многострочное текстовое поле.

ComboBox: Выпадающий список.

ToggleButton: Переключатель.

ListBox: Список.

Scale: Ползунок (шкала).

Dialog: Диалоговое окно.

Методы размещения виджетов:

box.PackStart(): Последовательное размещение виджетов в вертикальном контейнере VBox или горизонтальном контейнере HBox.

grid.Attach(): Размещение виджетов в таблице Grid.

fixed.Put(): Размещение виджетов по координатам в контейнере фиксированного размера Fixed.

notebook.AppendPage(): Размещение на виджете Notebook с вкладками.

stack.AddTitled(): Размещение виджетов один поверх другого в Stack и управление видимостью каждого из них.

Сборка и запуск простого приложения GtkSharp:#

Ниже описан пример создания простого десктоп приложения на GtkSharp с кнопкой. Для настройки и тестирования приложения необходимо выполнить следующие шаги.

Пункт 1#

  • создать консольный шаблонный проект и перейти в папку проекта:

dotnet new console -n MyGtkApp
cd MyGtkApp

Пункт 2#

  • установить пакет GtkSharp:

dotnet add package GtkSharp

Пункт 3#

  • изменить код файла Program.cs на приведенный ниже:

using Gtk;

public class MyGtkApp
{
    public static void Main()
    {
        Application.Init();

        // Создание главного окна
        var window = new Window("Простое GTK# Приложение");
        window.SetDefaultSize(300, 200);
        window.SetPosition(WindowPosition.Center);

        // Обработчик события закрытия окна
        window.DeleteEvent += delegate { Application.Quit(); };

        // Создание кнопки
        var button = new Button("Нажми меня!");
        button.Clicked += (sender, e) =>
        {
            Console.WriteLine("Кнопка нажата!");
        };

        // Добавление кнопки в окно
        window.Add(button);
        window.ShowAll();

        // Запуск приложения
        Application.Run();
    }
}

Пункт 4#

  • запустить приложение:

dotnet run

После выполнения этой команды должна открыться графическая форма вашего приложения с кнопкой. При нажатии на кнопку в терминале отобразится сообщение «Кнопка нажата!».

Сборка и упаковка#

Для публикации GtkSharp приложений c .Net используется стандартные команды упаковки из пакета dotnet-sdk. Создание deb-пакета возможно с помощью утилиты dpkg.

Пункт 1#

  • убедитесь, что ваш проект настроен корректно и все зависимости установлены:

dotnet restore
dotnet build

Пункт 2#

  • получить исполняемый файл приложения можно выполнив команду:

dotnet publish -c Release -o out -r linux-x64 --self-contained
где параметры:
  • -c Release указывает на выполнение сборки в режиме «Release»,

  • -r linux-x64 задает целевую платформу Linux для 64-битных систем,

  • -o out задает директорию публикации out,

  • –self-contained указывает, что все зависимости, включая .NET, будут включены в сборку.

Исполняемый файл приложения — ./out/MyGtkApp.

Пункт 3#

  • в заданной директории out также будет расположен файл MyGtkApp.dll, чтобы собрать только библиотеку dll приложения, нужно выполнить команду:

dotnet publish -c Release -o ./publish --no-self-contained

где параметры –self-contained указывает, что .NET Runtime не будет включен, поэтому запуск сборки возможен только на машинах, где установлен соответствующий .NET Runtime.

Пункт 4#

  • для того, чтобы создать DEB пакет необходимо:

    • установить утилиту dpkg-deb,

    • создать необходимую директорию,

    • скопировать папку out из пункта 2 в эту директорию,

    • создать внутри этой папки файл control и заполнить следующим содержимым:

    Package: myapp
    Version: 1.0
    Section: base
    Priority: optional
    Architecture: amd64
    Depends: .NETCoreApp (>= 3.1)
    Maintainer: Your Name <youremail@example.com>
    Description: Краткое описание приложения.
    
    • создать DEB пакета:

    dpkg-deb --build myapp_1.0