Blueprint é uma linguagem de marcação para criação de interfaces gráfica com o toolkit GTK.
Ela é desenvolvida e mantida pelo James Westman.
O seu principal objeto é ser uma linguagem de marcação fácil de aprender e que permita a construção de interfaces gráficas de forma rápida e declarativa.
É importante notar que a linguagem de marcação Blueprint não vem para substituir o padrão atual de construção de interfaces gráficas do GTK.
Assim como em outros frameworks e toolkits gráficos, o GTK utiliza o padrão XML para construção da parte visual dos aplicativos.
Posts relacionados:
- Gnome Builder o IDE para desenvolvimento de aplicativos GTK
- Como formatar textos em GTK com Pango Markup
- Como criar um aplicativo com Python e GTK no MS Windows
- Como criar um aplicativo com Python e GTK no ChromeOS
- Como criar um aplicativo com Python e o toolkit GTK no Linux
- Como criar um aplicativo com Python e o toolkit GTK no macOS
- Como instalar a linguagem de marcação Gnome Blueprint
Este é um formato amplamente utilizado e bem aceito no geral, contudo ele tende a ser difícil de ler e modificar manualmente.
Essa dificuldade tente a gerar uma curva de aprendizado grande e em muitos casos existe a necessidade da utilização de softwares que permitam o desenvolvimento das interfaces gráficas de forma visual.
Alguns exemplos desses softwares para GTK são:
- Cambalache.
- Drafting.
- Glade. Não é recomendada a sua utilização para o desenvolvimento com GTK 4.
- Workbench.
Para amenizar essas dificuldades é que nasce a ideia da linguagem de marcação Blueprint.
Para ficar mais claro vamos analisar o código da seguinte interface gráfica em ambas as linguagens de marcação:
Na imagem acima temos basicamente uma janela e um menu na barra de título.
Para descrever essa interface em XML (*.ui
) temos o seguinte código:
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk" version="4.0"/>
<template class="ExampleWindow" parent="GtkApplicationWindow">
<property name="title">Python e GTK 4: PyGObject Gtk.ApplicationWindow() ui file.</property>
<property name="default-width">683</property>
<property name="default-height">384</property>
<child type="titlebar">
<object class="GtkHeaderBar" id="header_bar">
<child type="end">
<object class="GtkMenuButton">
<property name="icon-name">open-menu-symbolic</property>
<property name="menu-model">primary_menu</property>
</object>
</child>
</object>
</child>
</template>
<menu id="primary_menu">
<section>
<item>
<attribute name="label" translatable="yes">_Preferences</attribute>
<attribute name="action">app.preferences</attribute>
</item>
</section>
</menu>
</interface>
A mesma interface gráfica na linguagem de marcação Blueprint (*.blp
) tem o seguinte código:
using Gtk 4.0;
template $ExampleWindow: Gtk.ApplicationWindow {
title: 'Python and GTK: PyGObject Gtk.ApplicationWindow.';
default-width: 683;
default-height: 384;
[titlebar]
Gtk.HeaderBar header_bar {
[end]
Gtk.MenuButton {
icon-name: 'open-menu-symbolic';
menu-model: primary_menu;
}
}
}
menu primary_menu {
section {
item {
label: _('Preferences');
action: 'app.preferences';
}
}
}
Como podemos ver o código da interface gráfica se torna bem mais legível e simples com a linguagem de marcação Blueprint.
Blueprint compiler
Relembrando o que foi dito anteriormente.
A linguagem de marcação Blueprint não vem para substituir o padrão atual de construção de interfaces gráficas do GTK.
Isso significa que escrevemos a interface gráfica em Blueprint (*.blp
) e precisamos converter o arquivo gerado para um arquivo XML (*.ui
) que será lindo pelo GtkBuilder
.
Para realizar essa conversão/compilação precisamos instalar a ferramenta de linha de comando (CLI) blueprint-compiler
.
Instalação
Linux
Arch Linux
- Site oficial do Arch Linux.
sudo pacman -S \
blueprint-compiler
Fedora
- Site oficial do Fedora.
sudo dnf install \
blueprint-compiler
openSUSE Tumbleweed
- Site oficial do openSUSE Tumbleweed.
sudo zypper install \
blueprint-compiler
Ubuntu
- Site oficial do Ubuntu.
sudo apt install \
blueprint-compiler
Microsoft Windows
Para realizar a instalação do blueprint-compiler
no Microsoft Windows é necessário que o MSYS2 esteja instalado e configurado.
Abra o terminal do MSYS2 e execute no terminal o comando:
pacman -S \
mingw-w64-x86_64-blueprint-compiler
Instalação via código fonte
Para obter a ultima versão do blueprint-compiler
podemos realizar a instalação do mesmo a partir do seu código fonte.
A instalação é bem simples e com poucas dependências.
Dependências
macOS
brew install \
git \
meson \
ninja
Linux
Arch Linux
- Site oficial do Arch Linux.
sudo pacman -S \
git \
meson \
ninja
Fedora
Site oficial do Fedora.
sudo dnf install \
git \
meson \
ninja-build
openSUSE Tumbleweed
- Site oficial do openSUSE Tumbleweed.
sudo zypper install \
git \
meson \
ninja
Ubuntu:
- Site oficial do Ubuntu.
sudo apt install \
git \
meson \
ninja-build
Microsoft Windows
Para realizar a instalação do blueprint-compiler
no Microsoft Windows é necessário que o MSYS2 esteja instalado e configurado.
Abra o terminal do MSYS2 e instale as seguinte dependências:
pacman -S \
git \
mingw-w64-x86_64-meson \
mingw-w64-x86_64-ninja
Instalação
Assim que as dependências estiverem instaladas abra um terminal e clone o repositório do blueprint-compiler
:
git clone https://gitlab.gnome.org/jwestman/blueprint-compiler.git
No caso do Microsoft Windows utilize o terminal MINGW64 do MSYS2.
Agora acesse a pasta que foi clonada:
cd blueprint-compiler
Ao acessar a pasta execute o comando:
meson _build
Assim que o processo de build terminar execute:
ninja -C _build install
Assim que o processo de instalação terminar o blueprint-compiler
estará disponível no sistema operacional 🚀:
blueprint-compiler --version
Principais comandos
Iniciar um passo a passo para configuração do projeto:
blueprint-compiler port
Para converter um arquivo *.blp
para *.ui
:
blueprint-compiler compile MainWindow.blp --output MainWindow.ui
Para conhecer todos os recursos disponíveis:
blueprint-compiler --help
Extra
Extensões
Alguns editores de texto possuem suporte para a linguagem de marcação Blueprint.
Dentro os principais temos: