Рубрики
Программирование

Разработка GUI-приложений под Linux… на C#. Часть 1

С выходом .Net Core уже никого не удивить тем, что на C# можно разрабатывать под Linux. Хотите WebAPI на своём сервере в AWS? Пожалуйста! Консольную утилитку для собственных нужд? Без проблем. А что, если захотелось сделать приложение с графическим интерфейсом? Оказывается, что и это тоже можно и, более того, это не сложно. Под катом рассмотрим то, с чего начать разработку и структуру «Hello world» — проекта. Что-то своё сделаем в следующей части. Добро пожаловать.

Устанавливаем VS Code

Тут всё просто — загружаем Visual Studio Code .deb и устанавливаем. Поскольку мы собираемся использовать C# то после установки VS Code нам потребуется поставить соответствующее расширение.

Устанавливаем dotnet core

Для моей Ubuntu 19.04 я сделал следующее:

wget -q https://packages.microsoft.com/config/ubuntu/19.04/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt install apt-transport-https
sudo apt update
sudo apt install dotnet-sdk-2.2

После установки проверяем версию:

dotnet --version

Если версия появилась и она актуальная, то поздравляю — мы закончили с подготовкой и пора приступить к основной части. Если же у вас возникли проблемы, то более подробно об установке смотреть здесь.

Устанавливаем шаблон

Для того чтобы создать приложение нам нужно выполнить команду dotnet new, которая инициализирует проект или его часть и вызывает подсистему шаблонов, чтобы создать артефакты на диске на основе заданных параметров и шаблона. Нам необходим шаблон GtkSharp, который позволит нам создать проект со всеми необходимыми для простейшего приложение зависимостями.

Для его установки выполним команду:

dotnet new --install GtkSharp.Template.CSharp

Далее проверим список установленных проектов:

dotnet new -h

В списке установленных шаблонов должны появиться следующие:

  • Gtk Application — создаёт Gtksharp проект
  • Gtk Dialog — создаёт файлы диалога
  • Gtk Widget — создаёт файлы виджета
  • Gtk Windows — создаёт файлы окна

В этой части мы познакомимся с первым шаблоном, а остальные используем позже.

Создаём и запускаем проект

Для того чтобы создать проект вновь обратимся к консоли и выполним команду создания проекта:

dotnet new gtkapp

Обращу внимание, что в команде используется краткое имя, которое также увидеть в списке доступных шаблонов.
Откроем теперь созданный проект и увидим следующую картину:

image

Созданный проект можно сразу же запустить при помощи команд

dotnet build
dotnet run

Однако, каждый раз обращаться к консоли не слишком удобно и для того чтобы ограничиться нажатием Ctrl+F5 создадим конфигурацию и соответствующие таски.

Конфигурацию разместим в файле ~/{ProjectDir}/.vscode/launch.json:

{
 "version": "0.2.0",
  "configurations": [
  {
  "name": ".NET Core Launch (console)",
  "type": "coreclr",
  "request": "launch",
  "preLaunchTask": "build",
  "program": "${workspaceFolder}/bin/Debug/netcoreapp2.0/.dll",
  "args": [],
  "cwd": "${workspaceFolder}",
  "console": "internalConsole",
  "stopAtEntry": false
 },
 {
  "name": ".NET Core Attach",
  "type": "coreclr",
  "request": "attach",
  "processId": "${command:pickProcess}"
 }
 ]
 }

Так же необходимо рядом создать таску для сборки в файле ~/{ProjectDir}/.vscode/launch.json:

{
"version": "2.0.0",
"tasks": [
  {
   "label": "build",
   "command": "dotnet build",
   "type": "shell",
   "group": "build",
   "presentation":
   {
        "reveal": "silent"
   },
   "problemMatcher": "$msCompile"
  }
 ]
}

Теперь запустив наш проектик увидим следующую картину.

image

Ура! Работает!

Что есть что в проекте

Замечательно, теперь мы умеем в «Hello world»! Но для того, чтобы двигаться дальше, нужно разобраться что происходит и что за что отвечает. Как нетрудно догадаться ключевую роль играет библиотека gtk#.

Строго говоря, gtk# является wrapper’ом над gtk+, кроссплатформенным GUI фреймворком, который особенно известен в Linux, т.к. она является базисом для построения виджетов рабочей среды Gnome. Насколько мне известно он есть во многих Linux дистрибутивах, хорошо работает с Windows-системами. Так же важно понимать, что gtk# работает на любой .NET-совместимой среде — .Net Framework, .Net Core, Mono. Являясь ядром построения оконных и виджет систем gtk#, тем не менее не является единственной библиотекой позволяющей нам создать окошко.

Библиотека glade# наследует gtk# являясь подмножеством gtk# совместимой полностью с ней совместима, но при этом glade# ещё и автоматически компонует окна, диалоги и виджеты и сохраняет их как XML-файл с расширением .glade. Это экономит время за счет отсутствия необходимости написания программного кода для GUI и делает простым изменение интерфейса в будущем. Также можно рассматривать glade# оболочку для связи с libglade на языке C#. Но при этом glade# имеет ограничения, в частности, она не может выполнять некоторые специфичные вещи, к примеру, скрывать элементы. Тем не менее, можно создать GUI и без glade и лишь опыт поможет понять, что в конкретном случае лучше использовать.
А поскольку лучший способ набраться опыта — это практика, то в следующей части мы попробуем создать своё приложение.

P.S. Исходники вы можете найти на GitHub‘е

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *