Vyhledávání na webu

Jak vytvořit GUI aplikace pod Linuxem pomocí PyGObject - část 1


Vytváření aplikací v Linuxu lze provádět různými způsoby, ale existují omezené způsoby, jak to udělat, takže pomocí nejjednodušších a nejfunkčnějších programovacích jazyků a knihoven se podíváme na rychlý pohled na vytváření aplikací pod Linuxem. desktop pomocí knihovny GTK+ s programovacím jazykem Python, který se nazývá „PyGObject “.

PyGObject používá GObject Introspection k vytvoření vazby pro programovací jazyky jako Python, PyGObject je další generací z PyGTK, dá se říci, že PyGObject=Python + GTK3.

Dnes zahájíme sérii o vytváření aplikací GUI (Graphical User Interface) na ploše Linuxu pomocí knihovny GTK+ a jazyka PyGobject, série se bude týkat následujících témat:

O Pythonu

Nejprve musíte mít nějaké základní znalosti v Pythonu; Python je velmi moderní a snadno použitelný programovací jazyk. Je to jeden z nejznámějších programovacích jazyků na světě, pomocí Pythonu budete moci vytvářet mnoho skvělých aplikací a nástrojů. Můžete absolvovat některé bezplatné kurzy, jako jsou ty na codeacademy.com, nebo si můžete přečíst nějaké knihy o Pythonu na:

O GTK+

GTK+ je open-source multiplatformní sada nástrojů pro vytváření grafických uživatelských rozhraní pro desktopové aplikace, poprvé byla spuštěna v roce 1998 jako sada nástrojů GUI pro GIMP, později byla použita v mnoha dalších aplikacích a se brzy stal jednou z nejznámějších knihoven pro vytváření GUI. GTK+ je vydáno pod licencí LGPL.

Vytváření GUI aplikací pod Linuxem

Existují 2 způsoby, jak vytvářet aplikace pomocí GTK+ a Pythonu:

  1. Psaní grafického rozhraní pouze pomocí kódu.
  2. Návrh grafického rozhraní pomocí programu „Glade“; což je nástroj RAD pro snadné navrhování rozhraní GTK+, Glade generuje GUI jako soubor XML, který lze použít s jakýmkoli programovacím jazykem k sestavení GUI. Po exportu souboru XML GUI budeme schopni propojit soubor XML s naším program dělat práci, kterou chceme.

Oba způsoby si stručně vysvětlíme.

Cesta pouze pomocí kódu

Psaní grafického uživatelského rozhraní pouze pomocí kódu může být pro programátory noob trochu obtížné a velmi ztráta času, ale s jeho pomocí můžeme vytvořit velmi funkční GUI pro naše programy, více než ty, které vytváříme pomocí některých nástrojů, jako je Glade.

Vezměme si následující příklad.

#!/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()

Zkopírujte výše uvedený kód, vložte jej do souboru „test.py“ a nastavte oprávnění 755 pro soubor test.py a spusťte soubor později pomocí „./test.py “, to je to, co dostanete.

nano test.py
chmod 755 test.py
./test.py

Kliknutím na tlačítko uvidíte v terminálu vytištěnou větu „Ahoj, světe!“:

Dovolte mi vysvětlit kód podrobným vysvětlením.

  1. #!/usr/bin/python: Výchozí cesta pro interpret Python (ve většině případů verze 2.7), tento řádek musí být prvním řádkem v každém souboru Python.
  2. # -*- kódování: utf-8 -*-: Zde nastavíme výchozí kódování souboru, UTF-8 je nejlepší, pokud chcete podporovat neanglické jazyky, nechte to tak .
  3. z gi.repository import Gtk: Zde importujeme knihovnu GTK 3, abychom ji mohli použít v našem programu.
  4. Třída ourwindow(Gtk.Window): Zde vytváříme novou třídu, která se nazývá „ourwindow“, také nastavujeme typ objektu třídy na „Gtk.Window“.
  5. def __init__(self): Nic nového, zde definujeme komponenty hlavního okna.
  6. Gtk.Window.__init__(self, title=”My Hello World Program”): Tento řádek používáme k nastavení názvu “My Hello World Program” na okno “ourwindow”, můžete změnit název, chcete-li.
  7. Gtk.Window.set_default_size(self, 400,325): Nemyslím si, že tento řádek potřebuje vysvětlení, zde nastavujeme výchozí šířku a výšku pro naše okno.
  8. Gtk.Window.set_position(self, Gtk.WindowPosition.CENTER): Pomocí tohoto řádku budeme moci nastavit výchozí pozici okna, v tomto případě jej nastavíme na střed pomocí parametru „Gtk.WindowPosition.CENTER“, pokud chcete, můžete jej změnit na „Gtk.WindowPosition.MOUSE“ a otevřít okno na pozici ukazatele myši.
  9. button1=Gtk.Button(“Ahoj, světe!”): Vytvořili jsme nové Gtk.Button a nazvali jsme ho „button1 “, výchozí text pro tlačítko je „Hello, World! “, můžete si vytvořit libovolný Gtk widget, pokud chcete.
  10. button1.connect(“clicked”, self.whenbutton1_clicked): Zde propojujeme signál “clicked” s akcí “whenbutton1_clicked”, takže po kliknutí na tlačítko se akce “whenbutton1_clicked” je aktivován.
  11. self.add(button1): Pokud chceme, aby se naše Gtk widgety objevily, musíme je přidat do výchozího okna, tento jednoduchý řádek přidá do okna widget „button1“, je velmi nutné Udělej to.
  12. def whenbutton1_clicked(self, button): Nyní zde definujeme akci „whenbutton1_clicked “, definujeme, co se stane, když se klikne na widget „button1 “, „(self, button ) “ je důležitý pro určení typu nadřazeného objektu signálu.
  13. tisknout „Ahoj, světe!“: Více zde nemusím vysvětlovat.
  14. window=ourwindow(): Musíme vytvořit novou globální proměnnou a nastavit ji na třídu ourwindow(), abychom ji mohli později volat pomocí knihovny GTK+.
  15. window.connect(“delete-event“, Gtk.main_quit): Nyní propojujeme signál „delete-event“ s akcí „Gtk.main_quit“, což je důležité pro smazání všechny widgety poté, co automaticky zavřeme okno programu.
  16. window.show_all(): Zobrazení okna.
  17. Gtk.main(): Spuštění knihovny Gtk.

To je ono, snadné ne? A velmi funkční, pokud chceme vytvářet nějaké velké aplikace. Další informace o vytváření rozhraní GTK+ pouze pomocí kódu můžete navštívit na oficiálních webových stránkách dokumentace na adrese:

Výukové programy Python GTK3

The Glade Designer Way

Jak jsem řekl na začátku článku, Glade je velmi snadný nástroj pro vytváření rozhraní, která potřebujeme pro naše programy, je velmi známý mezi vývojáři a pomocí něj bylo vytvořeno mnoho skvělých rozhraní aplikací. Tento způsob se nazývá „Rychlý vývoj aplikací“.

Chcete-li jej začít používat, musíte nainstalovat Glade na Debian/Ubuntu/Mint:

sudo apt­-get install glade

Na RedHat/Fedora/CentOS spusťte:

yum install glade

Po stažení a instalaci programu a po jeho spuštění uvidíte vlevo dostupné widgety Gtk, kliknutím na widget „okno “ vytvořte nové okno.

Všimnete si, že se vytvoří nové prázdné okno.

Nyní do něj můžete přidat nějaké widgety, na levém panelu nástrojů klikněte na widget „tlačítko“ a klikněte na prázdné okno, abyste do okna přidali tlačítko.

Všimnete si, že ID tlačítka je „button1 “, nyní přejděte na kartu Signály v pravém panelu nástrojů a vyhledejte signál „kliknutí “ a zadejte „button1_clicked “ pod ním.

Nyní, když jsme vytvořili naše GUI, pojďme jej exportovat. Klikněte na nabídku „File“ a zvolte „Save“, uložte soubor do svého domovského adresáře pod názvem „myprogram.glade“ a výstup.

Nyní vytvořte nový soubor „test.py“ a zadejte do něj následující kód.

#!/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()

Uložte soubor, udělte mu 755 oprávnění jako dříve a spusťte jej pomocí „./test.py“ a to je to, co získáte.

nano test.py
chmod 755 test.py
./test.py

Klikněte na tlačítko a všimnete si, že v terminálu je vytištěna věta „Hello, World!“.

Nyní si vysvětlíme nové věci:

  1. class Handler: Zde vytváříme třídu s názvem „Handler“, která bude obsahovat definice akcí a signálů, které vytváříme pro GUI.
  2. builder=Gtk.Builder(): Vytvořili jsme novou globální proměnnou nazvanou „builder“, což je widget Gtk.Builder, což je důležité pro import souboru .glade.
  3. builder.add_from_file("myprogram.glade"): Zde importujeme soubor "myprogram.glade", abychom jej mohli použít jako výchozí GUI pro náš program.
  4. builder.connect_signals(Handler()): Tento řádek spojuje soubor .glade s třídou handler, takže akce a signály, které definujeme pod třídou „Handler“ fungují dobře, když program spustíme .
  5. ournewbutton=builder.get_object(“button1”): Nyní importujeme objekt “button1” ze souboru .glade a také jej předáme do globální proměnné “ournewbutton”, abychom jej mohli použít později v našem programu.
  6. ournewbutton.set_label(“Ahoj, světe!”): Použili jsme metodu “set.label” k nastavení výchozího textu tlačítka na “Ahoj, světe! “věta.
  7. window=builder.get_object(“window1”): Zde jsme zavolali objekt “window1” ze souboru .glade, abychom jej později v programu zobrazili.

A to je vše! Úspěšně jste vytvořili svůj první program pod Linuxem!

Pro vytvoření skutečné aplikace, která něco dělá, je samozřejmě potřeba udělat mnohem složitější věci, proto vám doporučuji nahlédnout do dokumentace GTK+ a GObject API na:

  1. Referenční příručka GTK+
  2. Reference Python GObject API
  3. Reference PyGObject

Vyvinuli jste již nějakou aplikaci pod Linuxem? Jaký programovací jazyk a nástroje k tomu byly použity? Co si myslíte o vytváření aplikací pomocí Pythonu a GTK 3?