Hello World (Python) Susanna Huhtanen ihmis.suski@gmail.com 2012 Tiffany Antopolski tiffany.antopolski@gmail.com Základní aplikace „Hello, world“ Jak sestavit a nainstalovat program „Hello World“ a jak pro něj vytvořit balíček <file>tar.xz</file>

Tato lekce ukazuje jak:

vytvořit malou aplikaci „Hello, World“ pomocí jazyka Python a GTK+

vytvořit soubor .desktop

nastavit sestavovací systém

Vytvoření programu
Importované knihovny from gi.repository import Gtk import sys

Aby náš skript fungoval s GNOME, musíme naimportovat knihovny GNOME přes GObject Introspection. Zde importujeme vazbu jazyka a GTK+, tj. knihovnu, která obsahuje grafické widgety používané k vytvoření aplikací GNOME.

Vytvoření hlavního okna pro aplikaci class MyWindow(Gtk.ApplicationWindow): # konstruktor pro Gtk.ApplicationWindow def __init__(self, app): Gtk.Window.__init__(self, title="Hello World!", application=app) self.set_default_size(200, 100) class MyApplication(Gtk.Application): def __init__(self): Gtk.Application.__init__(self) def do_activate(self): win = MyWindow(self) win.show_all() def do_startup(self): Gtk.Application.do_startup(self)

Gt.Application inicializuje GTK+. Rovněž napojí tlačítko ×, které je vytvořeno automaticky spolu s oknem, na signál "destroy".

Můžeme začít sestavovat naše první okno. Provedeme to vytvořením proměnné s názvem MyWindow, které přiřadíme new Gtk.ApplicationWindow.

Nastavíme vlastnost okna nazvanou title. Může jí být libovolný řetězec, který bude sloužit jako jeho název v záhlaví. Je dobré lpět na kódování UTF-8.

Nyní máme okno, která má název a funkční „zavírací“ tlačítko. Pojďme přidat pořádný text „Hello World“.

Popisek pro okno # Přidá widget Label do vašeho okna # Vytvoří popisek label = Gtk.Label() # Nastaví popisku text label.set_text("Hello GNOME!") # Přidá popisek do okna self.add(label)

Textový popisek je jeden z widgetů GTK+, který můžeme použít na základě toho, že jsme importovali knihovnu GTK+. Abychom jej mohli použít, vytvoříme proměnnou nazvanou label a nastavíme text, který popisek obsahuje. Nakonec vytvoříme a spustíme aplikaci.

# Spustí aplikaci app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)

Gtk.Application může v jednu chvíli obsahovat jen jeden widget. Pokud chcete sestrojit složitější program, budete uvnitř okna potřebovat vytvořit kontejnerový widget, jako je Gtk.Grid, a všechny ostatní widgety přidat do něj.

hello-world.py

Celý soubor:

from gi.repository import Gtk import sys class MyWindow(Gtk.ApplicationWindow): # Konstruktor pro Gtk.ApplicationWindow def __init__(self, app): Gtk.Window.__init__(self, title="Welcome to GNOME", application=app) self.set_default_size(200, 100) # Vytvoří popisek label = Gtk.Label() # Nastaví text popisku label.set_text("Hello GNOME!") # Přidá popisek do okna self.add(label) class MyApplication(Gtk.Application): def __init__(self): Gtk.Application.__init__(self) def do_activate(self): win = MyWindow(self) win.show_all() def do_startup(self): Gtk.Application.do_startup(self) app = MyApplication() exit_status = app.run(sys.argv) sys.exit(exit_status)
Spuštění aplikace z terminálu

Když chcete tuto aplikaci spustit, nejprve ji uložte jako hello-world.py. Pak otevřete terminál, přejděte do složky, kde je aplikace uložená, a spusťte:

$ python hello-world.py
Soubor <file>.desktop.in</file>

Spouštění aplikace z terminálu je užitečné na začátku při postupném vytváření aplikace. Abychom dostali plně funkční aplikaci integrovanou s GNOME 3, potřebujeme spouštěč do pracovního prostředí. K tomu musíte vytvořit soubor .desktop. Soubor .desktop popisuje název aplikace, použitou ikonu a různé integrační drobnosti. Hlubší rozebrání souboru .desktop můžete najít zde. Ze souboru .desktop.in se vytvoří soubor .desktop.

Příklad ukazuje minimální požadavky pro soubor .desktop.in.

[Desktop Entry] Version=1.0 Encoding=UTF-8 Name=Hello World Comment=Say Hello Exec=@prefix@/bin/hello-world Icon=application-default-icon Terminal=false Type=Application StartupNotify=true Categories=GNOME;GTK;Utility;

Nyní se pojďme podívat na některé části souboru .desktop.in.

Name

Název aplikace.

Comment

Krátký popis aplikace.

Exec

Určuje příkaz, který se má spustit, když aplikaci vyberete v nabídce. V tomto příkladu Exec jednoduše říká, kde najít soubor hello-world a tento soubor se už postará o zbytek.

Terminal

Určuje, jestli příkaz v klíči Exec běží v terminálu.

Abyste vaši aplikaci umístili do správné kategorie, musíte potřebné kategorie přidat na řádek Categories. Více informací o různých kategoriích můžete najít ve specifikaci nabídky.

V tomto příkladu používáme existující ikonu. Pro vlastní ikonu potřebujete mít soubor SVG se svojí ikonou uložený v /usr/share/icons/hicolor/scalable/apps. Napište název svého souboru s ikonou do souboru .desktop.in na řádek 7. Více informací o ikonách: Instalace ikon pro motivy a Specifikace/icon-theme-spec na freedesktop.org.

Sestavovací systém

Aby se vaše aplikace stala opravdu součástí systému GNOME 3, je potřeba ji nainstalovat za pomoci autotools. Autotools nainstaluje všechny nutné soubory na správná místa.

K tomu budete potřebovat následující soubory:

autogen.sh #!/bin/sh set -e test -n "$srcdir" || srcdir=`dirname "$0"` test -n "$srcdir" || srcdir=. olddir=`pwd` cd "$srcdir" # Toto nám spustí autoconf, automake, atd. autoreconf --force --install cd "$olddir" if test -z "$NOCONFIGURE"; then "$srcdir"/configure "$@" fi

Když máme soubor autogen.sh připravený a uložený, spusťte:

$ chmod +x autogen.sh
Makefile.am # Skutečný spustitelný program je nastaven do primitiva SCRIPTS # # Prefix bin_ říká, kam to nakopírovat bin_SCRIPTS = hello-world.py # # Seznam souborů, které se mají šířit EXTRA_DIST= \ $(bin_SCRIPTS) # # # Soubory .desktop desktopdir = $(datadir)/applications desktop_DATA = \ hello-world.desktop
configure.ac # Tento soubor je zpracován pomocí autoconf, aby se vytvořil skript configure AC_INIT([Hello World], 1.0) AM_INIT_AUTOMAKE([1.10 no-define foreign dist-xz no-dist-gzip]) AC_CONFIG_FILES([Makefile hello-world.desktop]) AC_OUTPUT
README

Informace, které by si měl uživatel pro začátek přečíst. Tento soubor může být prázdný.

Když máme soubory hello-world, hello-world.desktop.in, Makefile.am, configure.ac a autogen.sh se správnými informacemi a v pořádku, může soubor README obsahovat následující instrukce:

To build and install this program: ./autogen.sh --prefix=/home/your_username/.local make install ------------- Running the first line above creates the following files: aclocal.m4 autom4te.cache config.log config.status configure hello-world.desktop install-sh missing Makefile.in Makefile Running "make install", installs the application in /home/your_username/.local/bin and installs the hello-world.desktop file in /home/your_username/.local/share/applications You can now run the application by typing "Hello World" in the Overview. ---------------- To uninstall, type: make uninstall ---------------- To create a tarball type: make distcheck This will create hello-world-1.0.tar.xz