abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 01:55 | Komunita

    24. září 2024 budou zveřejněny zdrojové kódy přehrávače Winamp.

    Ladislav Hagara | Komentářů: 2
    včera 23:33 | Nová verze

    Google Chrome 125 byl prohlášen za stabilní. Nejnovější stabilní verze 125.0.6422.60 přináší řadu oprav a vylepšení (YouTube). Podrobný přehled v poznámkách k vydání. Opraveno bylo 9 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 0
    včera 21:11 | Nová verze

    Textový editor Neovim byl vydán ve verzi 0.10 (𝕏). Přehled novinek v příspěvku na blogu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    včera 20:55 | Nová verze

    Byla vydána nová verze 6.3 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.15.

    Ladislav Hagara | Komentářů: 0
    včera 13:33 | IT novinky

    Dnes ve 12:00 byla spuštěna první aukce domén .CZ. Zatím největší zájem je o dro.cz, kachnicka.cz, octavie.cz, uvycepu.cz a vnady.cz [𝕏].

    Ladislav Hagara | Komentářů: 2
    včera 13:22 | Nová verze

    JackTrip byl vydán ve verzi 2.3.0. Jedná se o multiplatformní open source software umožňující hudebníkům z různých částí světa společné hraní. JackTrip lze instalovat také z Flathubu.

    Ladislav Hagara | Komentářů: 0
    včera 12:22 | Pozvánky

    Patnáctý ročník ne-konference jOpenSpace se koná 4. – 6. října 2024 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytváří všichni účastníci, se skládá z desetiminutových

    … více »
    Zdenek H. | Komentářů: 0
    včera 03:11 | Nová verze

    Program pro generování 3D lidských postav MakeHuman (Wikipedie, GitHub) byl vydán ve verzi 1.3.0. Hlavní novinkou je výběr tvaru těla (body shapes).

    Ladislav Hagara | Komentářů: 5
    15.5. 23:11 | Bezpečnostní upozornění

    Intel vydal 41 upozornění na bezpečnostní chyby ve svých produktech. Současně vydal verzi 20240514 mikrokódů pro své procesory řešící INTEL-SA-01051, INTEL-SA-01052 a INTEL-SA-01036.

    Ladislav Hagara | Komentářů: 0
    15.5. 16:22 | IT novinky

    Společnost Raspberry Pi patřící nadaci Raspberry Pi chystá IPO a vstup na Londýnskou burzu.

    Ladislav Hagara | Komentářů: 0
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (74%)
     (5%)
     (10%)
     (10%)
    Celkem 293 hlasů
     Komentářů: 16, poslední 14.5. 11:05
    Rozcestník

    Stibiho amatérská „příručka“ k PyGTK - díl 1

    16.9.2006 13:57 | Přečteno: 1757× | PyGTK | Výběrový blog | poslední úprava: 16.9.2006 17:05

    Zdravím, tak jsem ze sebe vypotil první díl povídání o PyGTK, uvidíme co z toho bude, snad to není úplně odpad a do budoucna bude kvalita překladu, příkladů a všeho lepší. Paralelně s jednotlivými díly o samotném PyGTK budu uveřejňovat postupy při psaní samotné aplikace, konkrétně to bude prohlížeč obrázků.



    Co se týče dalších dílů o PyGTK, příště bude řeč o upravené a vylepšené AhojSvete a začnu s popisem jednotlivých widgetů...

    Stibiho amatérská „příručka“ k PyGTK 2.4


    Zdravím všechny u prvního dílu, této snůšky amatérských blábolů na téma Python a GTK. Předem se omlouvám, za všechny chyby, kterých doufám zas tak moc nebude, ale přece jenom, expert nejsem a tohle dělám jenom z radosti. Co se týče mého programování, tak mám nastudované docela dost teorie ale na praktické využití, se dost často nedostalo, buď se mi nechtělo, nebo kdo ví co proč jsem taková lemra :) .

    V Pythonu jsem úplný začátečník, umím něco slepit v PHP, trochu jsem blbnul v Javě, pár skopičin v Bashi, nějaké to drobky v PostgreSQL, no, a to bude tak nějak vše, HTML, CSS a podobně to snad ani nemá cenu zmiňovat, to umí kde kdo...

    Takže, při psaní využívám PyGTK Reference Manual a Tutorial, GTK+ 2.0 Tutorial, Reference Manual a taky Google.cz.

    Když tak kuk sem PyGTK.org a taky tady GTK.org .

    Jednotlivé díly budou na pokračování, nevím jak často budu psát, ale snad nějaká pravidelnost bude, nebo aspoň bez větších zpoždění.

    Snad někomu pomůžu, něco se naučím i já, a s trochou štěstí nikoho nepřivedu v omyl, to bych nerad, kdyby snad něco takového hrozilo, neváhejte mě rozcupovat v diskuzi :) .

    S překladem mám docela problémy, perfektní angličtinář nejsem, ale to hlavní problém není, spíš částo váhám, co přeložit, co ne, vím že někteří lidé mají rádí striktní dodržování anglických názvů, jiní za raději počešťování, nevím no, já jdu střední cestou, to znamená guláš smíchaný z anglických a českých termínů a názvů. To se týká u ukázek kódu. Tam už nevím vůbec, mě jako lamku občas mátly stejné názvy metody/funkce a eventu na které reaguje, takže to se snažím odlišit. Do budoucna se klidně budu řídit vašimi názory, takže doufám že se na téma překladu někdo ozve v diskuzi.


    A jdeme na to !


    GTK je knihovna určená pro vytváření GUI – tedy grafického uživatelského prostředí. Původně bylo GTK napsáno pro vývoj GIMPu, nyní se používá v mnoha dalších projektech.

    Plusy a mínusy GTK oproti třeba Qt hodnotit nemůžu, protože praktickou zkušenost nemám, ale určitě se najde někdo z KDE tábora, kdo se v diskuzi dole ozve a vyzvedne Qt, pokud to bude k věci tak prosím, ale flejmy si nechte na jiné místo ju ?! :)


    Mechanismus signálů a zpětných volání


    Signály v PyGTK, nejsou to samé jako Unixové signály, i když terminologie je stejná.

    Programy napsané v PyGTK fungují právě na systému signálů a patřičné odpovědi na ně, tedy když stiskneme tlačítko myšidla, je widgetem (věcičkou :)) vyslán příslušný signál.

    Některé signály dostanou do výbavy (dědí) všechny widgety (např. „destroy“), některé jsou zase specifické pro konkrétní widget (např. stav „toggled“ u toggle buttonu).

    Aby se po stisknutí tlačítka, nebo jakékoli události, vykonala příslušná akce, musíme vytvořit něco, co bude čekat na signál např. našeho tlačítka a zavolá příslušnou funkci, to něco se jmenuje handler, nebo taky česky obslužná rutina, budu dále používat handler...


    Definice handleru vypadá takto:

    nazev_handleru = objekt.connect ( jméno, fce, fce_data)

    Kde, „objekt“ je instance GTKwidgetu, která vysílá signál.

    Funkce specifikovaná v druhém parametru se nazývá „callback funkce“. Zase si nejsem jistý jak překládat, tak to nechám takhle :)


    Definice callback funkce tedy vypadá následovně:

    def nazev_callbackFce ( widget, callback_data) :


    Pokud je callback funkce metoda objektu, potom ji máme v této podobě :

    def nazev_callbackMetoda (self, widget, callback_data) : 

    Jen tak na okraj, neměl jsem jasno v tom, jaký je rozdíl, mezi funkcí a metodou objektu. A i když jak jsem zjistil, princip je dost podobný, termíny jsou to dost odlišné a může to zmást... tedy :


    FUNKCE –je izolovaný kus kódu, který po zavolání vykoná to co jsme mu předepsali

    METODA OBJEKTU – je jak jsem se dočetl zvláštní funkce, která určitým způsobem „patří“ k určitému objektu. Její funkcí je většinou určitým způsobem modifikovat samotný objekt.

    Snad jsem to moc nezblbnul a nepíšu kraviny :) Uvedené definice signálů, handleru a callback funkcí je jen základní popis, některé widgety generují specifické signály a jsou volány jiné parametry.


    Události ( Events)


    Aby váš skript mohl reagovat na to, co s ním uživatel provádí, je systém signálů a callbacků doplněn o systém událostí ( Events). Události odrážejí to, co udělá uživatel, klikne li tedy na button (tlačítko), nastane událost button_press_event. A skript na základě toho rozhodne, co se stane dál.... Tedy koukne co jste mu předepsali k této události a vykoná to ...

    Tady můžete kouknout na seznam událostí:

    event
    button_press_event
    button_release_event
    scroll_event
    motion_notify_event
    delete_event
    destroy_event
    expose_event
    key_press_event
    key_release_event
    enter_notify_event
    leave_notify_event
    configure_event
    focus_in_event
    focus_out_event
    map_event
    unmap_event
    property_notify_event
    selection_clear_event
    selection_request_event
    selection_notify_event
    proximity_in_event
    proximity_out_event
    visibility_notify_event
    client_event
    no_expose_event
    window_state_event
    

    Callback funkce (nebo metoda) pro tyto události je maličko jiná.


    def nazev_callbackFce ( widget, událost, callback_data) : 
    

    def nazev_callbackMetody ( self, widget, událost, callback_data) :
    

    Pro spojení callback funkce s jednou z těchto událostí, se používá metoda connect() , jméno události se zapisuje do parametru „name“ .

    Takže, když chceme určite, co se stane, když se klikne ta tlačítko, použijeme něco takového :


    button.connect( "button_press_event", stisk_tlacitka_callback)

    Předpokládá se, že tlačítko je GTKbutton widget, když tedy klikneme na tlačítko, zavolá se funkce button_press_callback. A funkce je definována následovně (už to sice víme ale opakování matka moudrosti že …)


    def stisk_tlacitka_callback( widget, událost, data ):

    Takže asi takhle, připadá mi to docela jednoduché a šikovné... Teď si projdem ukázkové použití GTKbutton widgetu, nastavíme handlery, napíšeme pár metod a hlavně to celé rozebereme, popíšeme, vysvětlíme...

    Aplikace tedy bude klasická HelloWorld, po spuštění na nás vykoukne malé okno, s jedním tlačítkem, zatím nic moc, ale základní principy na tom jsou dobře vidět.


    Příklad – AhojSvete.py


    Kód příkladu AhojSvete


    (1)#!/usr/bin/env python
    (2)# -*- coding: UTF-8 -*-
    (3)
    (4)import pygtk
    (5)pygtk.require('2.0')
    (6)import gtk
    (7)
    (8)class AhojSvete:
    (9)
    (10)def ahoj_hlaska(self, widget, data=None):
    (11)print "Ahoj světe"
    (12)gtk.main_quit()
    (13)
    (14)def zabij_okno(self, widget, event, data=None):
    (15)print "Zavřeli jsme okno"
    (16)gtk.main_quit()
    (17)
    (18)def __init__(self):
    (19)self.okno = gtk.Window(gtk.WINDOW_TOPLEVEL)
    (20)self.okno.connect("delete_event", self.zabij_okno)
    (21)self.okno.set_border_width(10)
    (22)self.tlacitko = gtk.Button("Ahoj světe")
    (23)self.tlacitko.connect("clicked", self.ahoj_hlaska)
    (24)self.okno.add(self.tlacitko)
    (25)self.tlacitko.show()
    (26)self.okno.show()
    (27)
    (28)def main(self):
    (29)gtk.main()
    (30)
    (31)if __name__ == "__main__":
    (32)ahoj = AhojSvete()
    (33)ahoj.main()

    Pokud budete kód zkoušet, nezapomeňte na odsazení !


    Rozbor příkladu AhojSvete

    Teorie bylo až až, koukněte na příklad nahoře, projdem to....

    Jinak když skript uložíme např. do souboru AhojSvete.py a spustíme z konzole pomocí python AhojSvete.py tak na nás vyskočí malé okýnko, s jedním buttonem, když kliknem na button, do konzole se vypíše hláška, když okno zavřem, dostanem jinou hlášku ..

    Takže …

    Co se týče prvních dvou řádků, první umožňuje spuštění skriptu přímo klikem na soubor v Xkách (pokud jste tedy přidělili správná práva) a druhý řádek nastavuje kódování, kdybychom ho nenastavili, tak by se celkem nic nestalo, sice bychom dostali warning, ale skript by se spustil, a české znaky by se zobrazily správně, ale my warningy nechceme, takže jsme kódování nastavili :)

    Řádky 8-29 obsahují všechny definice třídy AhojSvete, všechny callback metody (a funkce, ale v tomto konkrétním případě funkci nemáme) a všechny inicializace instancí objektů.

    Na řádcích 10-12 máme callback metodu ahoj_hlaska(), která je volána když je stisknut button, když tato událost nastane, je do konzole vypsána hláška „Ahoj světe“ skript se ukončí. V tomto případě vůbec neřešíme jaké instance se metoda týká, neřeší se ani parametry, není třeba. Metoda má za úkol jen vyplivnout na konzoli hlášku a ukončit činnost, tím to pro ni končí. Ale jinak většina callback metod samozřejmě určení instance objektu se kterou se bude něco dít a nastavení parametrů využívá.

    Další callback je trochu speciální (řádky 14-16). „zabij_okno“ se spustí, když window manager odešle aplikace zprávu, že tato událost (delete_event) nastala. Tedy, normálně řečeno, když kliknem v okně aplikace na křížek pro zavření, Gnome ihned hlásí aplikaci, že nastala událost delete_event a aplikace už další události ošéfuje tak, jak jsme jí to předepsali, tedy handler reagující na tuto událost spustí naši metodu „zabij_okno“.

    Ve skriptu máme tuto metodu, jenom k tomu, abychom při zavírání okna dostali hlášku do konzole, kdyby jste tuto metodu nevytvořili, okno by samozřejmě šlo normálně klasicky zavřít.

    Řádky 18-26 popisují inicializační metodu __init__(), která vytváří instance popsaných objektů, právě ona na nás vyplivne okno s tlačítkem a postará se o to, aby si prvky spolu povídali.

    Řádek 19 vytváří nové okno, avšak samotné vykreslení okna na obrazovku s provádí příkazem kousek níž, bude o něm řeč. Pro pozdější přístup k instanci okna můžeme použít odkaz „self.window“

    Na řádku 20, vidíme ukázku odchycení signálu a zavolání požadované funkce. V tomto případě se čeká na delete_event, tedy zavření okna, tím se zavolá metoda zabij_okno a ta se postará o vypsání hlášky do konzole a zavření okna.

    Řádek 21 nastavuje 10px bílého prostoru kolem buttonu, o atributech oken a dalších widgetů bude řeč v dalších dílech.

    Řádek 22 vytváří instanci buttonu s popiskem „Ahoj světe“ .

    Další řádek nastavuje k události „clicked“ callback metodu „ahoj_hlaska“.

    Řádek 24 je „packing“ příkaz, přidává widget do okna a vše o něm bude popsáno v dalších dílech.

    Řádky 25,26 mají na starost samotné vykreslení prvků na obrazovku.

    Řádky 28,29 definují „main()“ metodu, která volá gtk.main() funkci.

    Řádky 31,33 dovolují spuštění celého programu, vytvářejí instanci třídy AhojSvete .


    Hotovo :)


    První díl ke stažení v PDF.        

    Hodnocení: 93 %

            špatnédobré        

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    Komentáře

    Vložit další komentář

    16.9.2006 14:36 pepik | skóre: 16 | blog: nevim | Chlumec nad Cidlinou
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    Výborně. Tento zápis je opravdu super. S PyGTK bych celkem chtěl umět a jelikož nejsem moc dobrý angličtinář, tak tento blog mi opravdu hodně pomohl se alespoň odrazit. Byl bych rád kdyby autor napsal i nějaké pokračování o propojení s glade souborem, abych nemusel GUI psát ručně. Držím palce!
    Martin Stiborský avatar 16.9.2006 16:07 Martin Stiborský | skóre: 26 | blog: Stibiho bláboly | Opava
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    Noo o Glade se psát moc nechystám, zatím mi úplně stačí GVim...
    Kvík ..
    kozzi avatar 16.9.2006 14:43 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    Moc pěkný. Musíím tě pochválit. Akorát mám radši když se v kódu používají anglické názvy ale to vadi mozna jen me. Ale o něco víc mi vadí odsazování zdroje. měl by jsi používat tabulátor. Jinak hodnocení davam dobre
    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    18.9.2006 01:33 pm
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    Ne! V Pythonu je definovany standard odsazovat 4 mezerami. Nemusi se ti to libit, ale je to tak a je nutne a spravne se tohoto standardu drzet, aby byly zdrojaky jednotne a ne kazda ves jiny pes.
    16.9.2006 14:50 rajcze | skóre: 6 | blog: rajcze | kus od Brna
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    zkus se kouknout na tohle:
    http://www.py.cz/PythonAGlade
    Rules of Optimization: Rule 1: Don't do it. Rule 2 (for experts only): Don't do it yet.
    16.9.2006 16:05 Petr Bayer | blog: NIL
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    glade neni vselek
    Kill the poor!
    16.9.2006 18:22 rajcze | skóre: 6 | blog: rajcze | kus od Brna
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    nerikam ze je, ale stejne by me zajimalo co zasadniho mas proti
    Rules of Optimization: Rule 1: Don't do it. Rule 2 (for experts only): Don't do it yet.
    16.9.2006 19:42 Petr Bayer | blog: NIL
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    proti glade nemam nic, je to supr vec, ale predtim je dobre znat pygtk.
    a jinak, uz mame nove glade, ktere je tak trochu dost odlisne od toho stareho a to uz radsi nemluvim o gtk, takze nektere veci ze starsich tutorialu nebudou fungovat. a to pak je velka legrace resit "proc to ksakru nejde, kdyz jsem to zkopiroval z toho navodu", vyborne se na tom uci.
    Kill the poor!
    16.9.2006 20:18 rajcze | skóre: 6 | blog: rajcze | kus od Brna
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    nove glade ke me jeste nedorazilo, asi se budu muset podivat :)
    "proc to ksakru nejde, kdyz jsem to zkopiroval z toho navodu"
    hehe, tak to mas naprostou pravdu, jen by se mi opravdu nelibilo, kdyby me nekdo strasne sepsul ze to podle myho navodu nefunguje a pak se zjistilo ze je to kvuli jine verzi glade
    Rules of Optimization: Rule 1: Don't do it. Rule 2 (for experts only): Don't do it yet.
    16.9.2006 21:57 Petr Bayer | blog: NIL
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    16.9.2006 21:58 Petr Bayer | blog: NIL
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    jen by se mi opravdu nelibilo, kdyby me nekdo strasne sepsul ze to podle myho navodu nefunguje a pak se zjistilo ze je to kvuli jine verzi glade
    to vetsinou lidem dochazi az potom :-D
    Kill the poor!
    16.9.2006 16:41 Petr "Glubo" Sýkora | skóre: 21 | blog: Glubnik
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1

    Nakonec to dopadlo docela pěkně ;)

    Jen takový malý hint k psaní tagů <pre> zde na Ábíčku: když přidáš parametr class="kod", zobrazí se pak jako úryvky kódů v článcích, tedy v barevně odlišeném bloku.

    „O mrtvých jen v dobrém." „Pojďme se bavit o Stalinovi."
    Martin Stiborský avatar 16.9.2006 16:46 Martin Stiborský | skóre: 26 | blog: Stibiho bláboly | Opava
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    Díky, upravím, opravím :)
    Kvík ..
    Vojta Drbohlav avatar 16.9.2006 18:06 Vojta Drbohlav | skóre: 26 | blog: Blog | Strahov
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    Nečet sem to celý, ale podle mě by z toho byl pěknej článek ;-)
    Jardík avatar 16.9.2006 23:09 Jardík | skóre: 40 | blog: jarda_bloguje
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    Měl bych jen takovou malou výtku. Do toho zdrojáku příště nepiš ty čísla řádek, špatně se to kopíruje :)
    Věřím v jednoho Boha.
    17.9.2006 14:04 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    Špatně? :1,$s/^(\d*)// není až tak těžké ;-).
    When your hammer is C++, everything begins to look like a thumb.
    Martin Stiborský avatar 17.9.2006 12:34 Martin Stiborský | skóre: 26 | blog: Stibiho bláboly | Opava
    Rozbalit Rozbalit vše Re: Stibiho amatérská „příručka“ k PyGTK - díl 1
    Jestli by měl někdo nápad na něco konkrétního, o čem by se mohlo napsat, ať se ozve ju ?! :)
    Kvík ..

    Založit nové vláknoNahoru

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.