PyGTK 3: výukový program mini GUI s Python + GTK + 3

Chystáme se vytvořit malý program s PyGTK 3.0, který funguje také pro PyGTK 3.4. Toto malé GUI vás naučí, jak rozdělit program na dva nebo více souborů.

Můžete navštívit tutoriál Sebastiana Pölsterla o novém PyGTK 3, zde je nový tutoriál, nechávám odkaz:

http://python-gtk-3-tutorial.readthedocs.org/en/latest/index.html

Toto je Sebastianův blog.

http://k-d-w.org/node/88

Jedna kritika tohoto tutoriálu od Sebastiana je, že neučí, jak rozdělit program na části nebo na několik souborů, bylo by dobré, kdyby ukázal příklad, jak to udělat s PyGTK 3.

Všechny velké a složité programy jsou rozděleny do mnoha souborů a soubory jsou dokonce umístěny v jiných adresářích, to znamená, že jsou umístěny v různých složkách.

Začněme malým příkladem:

Zde je kód pro psaní v jediném souboru s názvem gui.py. Otevřeme textový editor Gedit nebo editor, který používáme nejčastěji, zkopírujeme níže uvedený kód a uložíme jej jako gui.py

z gi.repository import třídy Gtk gui (): def on_open_clicked (vlastní, tlačítko): tisk „Bylo otevřeno tlačítko„ Otevřeno “„ def on_close_clicked (vlastní, tlačítko): tisk „Zavírání aplikace“ Gtk.main_quit () def __init__ (self): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk.main_quit) self.box = Gtk.Box () self.window.add (self.box) self. button = Gtk.Button (label = 'Open') self.button.connect ("kliknuto", self.on_open_clicked) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button ( label = 'Zavřít') self.button.connect ("kliknuto", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () pokud __name__ == '__main__': gui = gui ()

štít

def on_open_clicked (self, button): print "\" Bylo otevřeno tlačítko "

Jedná se o funkci, která se aktivuje v terminálu, když klikneme na tlačítko Otevřít. Signál pro jeho aktivaci je:

self.button.connect ("kliknuto", self.on_open_clicked) def on_close_clicked (self, tlačítko): tisk "Zavírání aplikace" Gtk.main_quit ()

Je to funkce, která se aktivuje, když klikneme na tlačítko zavřít.

zavřete program, který spustíme.

signál k jeho aktivaci je

self.button.connect („kliknuto“, self.on_close_clicked) z gi.repository import Gtk ### vyvoláme knihovny PyGTK ### třída gui (): ### definice třídy zvaná gui je hlavní třída # ##

Deklarace widgetů: widgety je program předurčený knihovnami grafického rozhraní, které používáme. Například widgety jsou tlačítko, okno, rámeček atd. Toto jsou widgety, které deklarujeme v našem programu.

self.window = Gtk.Window () ### okno ### self.box = Gtk.Box () ### box #### self.button = Gtk.Button (label = 'Otevřít') ### # tlačítko otevřít #### self.button = Gtk.Button (label = 'Zavřít') #### tlačítko zavřít #### self.window.add (self.box) #### pole je obsaženo v okno s názvem okno #### self.box.pack_start (self.button, True, True, 0) ##### tlačítko je obsaženo v poli nazvaném box ### self.window.show_all () ## # zobrazíme celé okno ### gui = gui () ### vytvoříme objekt gui ####

Náš program umístíme do složky s názvem simple v našem případě na plochu

FERT

Otevřeme složku s terminálem, v mém případě používám Nemo z Linux Mint 14.

zavřeno

Ke kompilaci jsme vložili do terminálu python gui.py

viz obrázek.

terminál

Nyní můžeme vidět náš malý program nebo nový widget vytvořený pomocí knihoven PyGTK 3

Jedná se o jednoduché okno se dvěma tlačítky.

Bez názvu

Teď rozdělíme program na tři části, pak nechám kód pro tři soubory.

První soubor gui.py

z gi.repository import Gtk ze zničit import zničit z io import io třída gui (zničit, io): def __init __ (self): self.window = Gtk.Window () self.window.connect ('delete-event', Gtk .main_quit) self.box = Gtk.Box () self.window.add (self.box) self.button = Gtk.Button (label = 'Otevřít') self.button.connect ("kliknuto", self.on_open_clicked ) self.box.pack_start (self.button, True, True, 0) self.button = Gtk.Button (label = 'Zavřít') self.button.connect ("kliknuto", self.on_close_clicked) self.box.pack_start (self.button, True, True, 0) self.window.show_all () Gtk.main () if __name__ == '__main__': gui = gui ()

Druhý soubor io.py

třída io: def on_open_clicked (vlastní, tlačítko): tisk „Bylo kliknuto na tlačítko„ Otevřít “

Třetí soubor destru.py

z gi.repository import třídy Gtk zničit: def on_close_clicked (self, button): print "Closing application" Gtk.main_quit ()

V našem případě umístíme tři soubory do stejné složky, složka se nazývá simple split.

jednoduchý

Zkompilovat tři soubory. Otevřeme složku s terminálem a jednoduše ji vložíme zpět do terminálu

python gui.py

Úpravy provedené v kódu gui.py

ze zničit import zničit ### příkaz k importu našeho souboru destru.py ### z io importovat io ### příkaz k importu našeho souboru io.py ### třída gui (zničit, io): #### do třída hlavní přidáme podtřídy zničit a io ####

Vidíte tu větu

def on_open_clicked (self, button): print "\" Bylo otevřeno tlačítko "

Není v gui.py, je v souboru io.py

Věta

def on_close_clicked (self, button):

tisk "Zavírání aplikace"
Gtk.main_quit ()

nachází se v souboru destru.py

Můžeme tedy rozdělit program na mnoho souborů umístěných v různých adresářích současně.

Na druhou stranu je Python pilířem svobodného softwaru a je přizpůsoben pro práci s GTK 3.6 /3.8, jeho název je PyGTK. Pythonova adaptace pro KDE se nazývá PyQT.

Python je přizpůsoben pro Mac OS a WINDOWS.

Doufám, že vám tento mini tutoriál PyGTK3 pomohl. Mohou dělat všechny konstruktivní kritiky, které chtějí.

Znám také nějaké Gtk 3.4 /3.6 a Vala GTK 3.4 / 3.6.

http://www.youtube.com/watch?v=9ckRn_sx8CE

Nakonec se uživatelé KDE omlouvají za to, že pro KDE neprovádějí mini tutoriál.


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.

  1.   hnije87 řekl

    V kde dávám přednost použití kdevelop (myslím, že se tomu říká) k vytvoření GUI v pohodě, ale stále se mi těžko hledají procesy, aby se to stalo x věc: '(

  2.   st0rmt4il řekl

    Skvělé pro ty z nás, kteří používají Python: D!

    Zdravím!

  3.   Pablo řekl

    Dobrý den, sleduji tuto komunitu už dlouhou dobu a nejsem si moc jistý, jestli je to poprvé, co jsem komentoval, nebo jsem to udělal už dříve 😀 (psaní komentářů na webu mi moc nedává). Jde o to, že to udělám, abych nechal návrh Elavovi a KZKG ^ Gaarovi jako správcům, a myslím, že by bylo dobré přidat plugin pro barvení syntaxe, když v poslední době vidím více příspěvků s kódem v různých programovacích jazycích. Vím, že existuje poměrně málo pluginů, ale žádný jsem nezkoušel, protože nejsem uživatelem wordpressu, takže vás nechám přemýšlet o životaschopnosti požadavku. Využívám této příležitosti a ptám se ostatních čtenářů, co si o této myšlence myslí, protože vím, že jsou lidé, kteří si raději přečtou kód bez jakékoli ozdoby. Omlouvám se, pokud zde již bylo toto komentováno a bylo to z nějakého důvodu zamítnuto, protože si nepamatuji, že bych na toto téma viděl nějakou diskusi.

    1.    marianogaudix řekl

      Pravdou je, že bych chtěl mít možnost vybarvit syntaxi, aby zvýraznil kód programovacích jazyků.
      To by pomohlo uživatelům, kteří se chtějí naučit programovací jazyky.

      Ale hej, také mi vyhovuje fórum a že můžeme společně diskutovat a učit se.

      1.    eliotime3000 řekl

        GNU Emacs je pohodlnější, protože alespoň si musíte vybrat, ve které kontrole programovacího jazyka chcete pracovat (pokud nechcete mít větší váhu pro svůj procesor, použijte GNU Nano a užívejte si minimalismus v nejlepším případě).

        1.    marianogaudix řekl

          Elio, mluvíme o WordPressu. Implementováno na blogu Desde Linux. Nemá funkce pro vybarvování písmen příspěvků.

          1.    eliotime3000 řekl

            OH, omlouvám se.

        2.    pandev92 řekl

          Naaa emacs je pohodlný pro ty, kteří mají 84 prstů XD .., normální lidé, textmate, sublimetext nebo poznámkový blok ++ xd

          1.    eliotime3000 řekl

            Je nepravděpodobné, že jste se nenaučili psát, což je nutné, abyste zvládli GNU Emacs a jeho klávesové zkratky dobře. Jeho grafické uživatelské rozhraní vám navíc usnadňuje používání jeho nabídek (lze jej použít ve Windows, ale nedoporučuje se to dělat v normálním režimu, ale v režimu příkazového řádku, aby win32 váš bojkot neskriptoval).

  4.   Carper řekl

    Velmi cool návod. Mimochodem, zdrojový kód pythonu není kompilován, je to interpretovaný jazyk.

    1.    giskard řekl

      Lze jej zkompilovat do pseudokódu. Není to strojový jazyk, ale bajty, které tlumočníkovi něco představují, ale proces se také nazývá kompilovaný. V tomto smyslu je možné říci, že je něco kompilováno.

  5.   hty řekl

    Možná je lepší naučit se pytgk2, protože nejnovější verze dostupná pro Windows je 2.24. Série 3 je nápadná svou absencí. A špatné jazyky říkají, že gnome v každé nové verzi rozbíjí všechna rozhraní API.

    1.    marianogaudix řekl

      Naprogramuji maketu s GTK 3.4 / 3.6 a pravdou je, že vám zlomí trpělivost a hlavu, musíte přepsat kód, nyní chápu, proč si lidé z Linux Mint stěžují na GTK a projekt GNOME.
      Pro ty z MINT souhlasím s GTK 2.4, to se nestalo.

  6.   Carlos řekl

    Dobrý návod a reference.
    Jen detail, protože byl vložen kód, v Pythonu jsou odsazení povinná a měla by být respektována v ukázkovém kódu.

    Zdravím!

    1.    marianogaudix řekl

      Můžete vysvětlit, z čeho se skládají povinné identifikace v Pythonu? Abych řekl pravdu, nikdy jsem to neslyšel. Jsem špatně zvyklý na fóra PyGTK 2/3 v angličtině a možná to přehlédnu.

      1.    giskard řekl

        V Pythonu nepoužíváte klíče jako v C nebo bloky začátku / konce jako v Pascalu, ale vše je chápáno prostřednictvím odsazení, které dáte kódu. To znamená, že bloky jsou rozpoznány jako odsazené. Je to vlastnost, kterou zvlášť miluji. Vyvarujete se psaní klíčů a podobných věcí.

        1.    pandev92 řekl

          Jen se mi to nelíbí, zdá se jednodušší dát dva malé klíče nebo std :: endl;, než být viděn, pokud je řádek xd dobře tabulkově

          1.    felipe řekl

            : p Váš učitel programování vám dá 0. Nebo ještě hůř, vyhodí vás z práce. Nejdůležitější je, že kód je čitelný se vším, co z toho vyplývá

          2.    pandev92 řekl

            končící zavíracími složenými závorkami, to mě dělá mnohem čitelnějším XD

          3.    giskard řekl

            Vážně???


            int main(int argc, char *argv[]){program_name = argv[0];while ((argc > 1) && (argv[1][0] == '-')) {switch (argv[1][1]) {case 'v':verbose = 1; break;case 'o':out_file = &argv[1][2];break;case 'l':line_max = atoi(&argv[1][2]);break;default:fprintf(stderr,"Bad option %s\n", argv[1]);usage();}++argv;--argc;} if (argc == 1) {do_file("print.in");} else {while (argc > 1) {do_file(argv[1]);++argv;--argc;}}return (0);}

            Vidíš? Bez odsazení to není příliš dobře pochopeno. A to je snadné. Se složitějším to rozumí pouze překladač. Jde o to, že i když MUSÍTE stejně odsadit (aby lidé rozuměli kódu), proč byste museli být nadbyteční a používat oddělovače? Dost s odsazením a to je vše.

          4.    pandev92 řekl

            Samozřejmě nic nerozumíme, protože nerespektujete pravidla dobrého psaní programu v c / c ++. To, co jste udělali, je platné pro cokoli, například pro vnoření funkce, uvnitř funkce uvnitř jiné funkce, která je uvnitř jiné, pak vás chci vidět xd, pokud tomu rozumíte.

          5.    pandev92 řekl

            mimochodem, se dvěma pohledy je tento kód snadno srozumitelný xD

          6.    giskard řekl

            To, co jsem udělal, jsem udělal záměrně, abych vám ukázal, že bez odsazení, i když se kompiluje, je nesmírně obtížné porozumět jakémukoli kódu. Máte tedy 2 pravidla: Odsadit a zahrnout s oddělovači. Ale to je nadbytečné. V Pythonu takový kód tlumočník jednoduše nepřijímá. A máte pouze jedno pravidlo: Odsazení. Snadný.
            Ale hej, každý se svým vkusem.

          7.    Atheyus řekl

            Oba jsou dobré, odsazené i neodsazené, podle mého názoru preferuji středník nebo rubín, podobný pythonu, ale odsazení není nutné.

            Tomu se lépe rozumí: P:

            echo 'int main (int argc, char * argv []) {program_name = argv [0]; while ((argc> 1) && (argv [1] [0] ==' - ')) {switch (argv [ 1] [1]) {případ 'v': verbose = 1; break; case 'o': out_file = & argv [1] [2]; break; case 'l': line_max = atoi (& argv [1] [2]); break; výchozí: fprintf (stderr, »špatná volba % s \ n », argv [1]); usage ();} ++ argv; –argc;} if (argc == 1) {do_file (" print.in ");} else {while (argc> 1 ) {do_file (argv [1]); ++ argv; –argc;}} návrat (0);} '| perl -p -e 's / \ {/ \ {\ n \ t / g; s / \; / \; \ n \ t / g; s / \ t \} / \} / g;'

            Zdravím 😀

      2.    giskard řekl

        Myslím, že Carlos znamená, že tam, kde vychází kód, nejsou žádné odsazení. To s kopírováním a vložením prostě nebude fungovat. Nevím, zda značka existuje při vytváření příspěvku pro zadání kódu jazyka. Bylo by dobré, kdyby to dali, pokud neexistuje.

        1.    giskard řekl

          Už jsem viděl, v čem je problém: CODE Tag odstraní všechny mezery a karty (to by nemělo dělat !!!) Ale pokud na něj vložíte nbsp, pak kód vypadá dobře. A0 v hexadecimálním formátu (160 v prosinci), i když si myslím, že to může záviset na písmu (nevím). Pokud se použije, vyjde to takto:

          def fib(n):
              a, b = 0, 1
              while a < n:
                  print(a)
                  a, b = b, a+b

          Že v mých testech to vypadá dobře, ale nemám náhled, když zveřejňuji odpovědi (a mělo by to být !!!) Pokud to nevyjde, není to moje chyba

          1.    marianogaudix řekl

            Podívejte se na příklady, které uvádí Sebastian Pölsterl ve svém tutoriálu PyGTK 3, Sebastian neumisťuje štítky.

            Příklad:

            http://python-gtk-3-tutorial.readthedocs.org/en/latest/entry.html#example

            můžete vidět celý Sebastianův návod.

          2.    giskard řekl

            Nevím, co máte na mysli. To, co říkám, je, že zde, v příspěvcích, není možné použít HTML tag «CODE», takže to, co zadáte jako kód a vyjde dobře odsazené. Na stránce, na kterou odkazujete, pokud uvidíte zdroje stránky, uvidíte, že nepoužívá CODE, ale používá jiné oddělovače HTML.
            Není to proti kódu, který jste vložili, ale spíše upozorňuje na chybu v systému zveřejňování tohoto webu. Což snad mohou administrátoři opravit.
            Když mluvím o značkách, samozřejmě mluvím o HTML, ne o Pythonu. V každém případě, pokud vložíte kód bez odsazení do Pythonu, nebude to fungovat. Pokud nováček přijde a zkopíruje kód tak, jak je uveden v tomto příspěvku, a pokusí se ho spustit, neuspěje. Možná jste frustrovaní, protože jste nováček. Chyba opět není vaše; a v mé okamžité předchozí odpovědi to, co jsem udělal, bylo dát způsob, jak vyřešit problém z úrovně uživatel-kdo-příspěvky.

          3.    marianogaudix řekl

            Máte naprostou pravdu, místo kopírování kódu jsem měl nahrát fotografie.
            ukázat, jak jsou příkazy správně seřazeny v PyGTK 3.

  7.   felipe řekl

    K programování pomocí pythonu doporučuji použít Eclipse s pluginem PyDev nebo Pychar m

  8.   louis řekl

    Jak bylo uvedeno výše, proto nemám rád python kvůli odsazení. Jak jsme viděli, kopírování a vkládání nebude fungovat, což se nestává u jiných jazyků, jako jsou C, Java, PHP atd.

    V případě čitelnosti použijeme zkrášlovač kódu (jako http://indentcode.net/ ) a připraven,

    Ošklivý je opravený, ale pokud není odsazení a logika se změní, ozveme se ..

  9.   Carlos řekl

    Jsem v PyGTK nový, je možné v tomto jazyce komunikovat s shell skripty?

    1.    Haló řekl

      Děkujeme za návod.

      Zdravím.