Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Jak na GUI s wxPythonem

V tomto novém seriálu se zaměříme na vývoj GUI aplikací s pomocí knihovny wxPython tak, aby jej byl schopný zvládnout i běžný začátečník. Podíváme se na používání vývojového prostředí Boa Constructor a na další programátorské nástroje. Většina zde popsaných postupů bude vycházet z mých vlastních zkušeností.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Čas od času je potřeba napsat nějakou „okýnkovou“ aplikaci, aby byla pokud možno multiplatformní. Je zde možnost volby z několika programovacích jazyků (Perl, Java, Python,…) a GUI knihoven (GTK, QT, wxWindow,…).

Já osobně jsem zvolil kombinaci jazyka Python a knihovny wxWindow, resp. její nadstavbu wxPython, a to z několika důvodů:

  • Programovací jazyk a GUI knihovna Je multiplatformní a je pod licencí GPL.
  • Pro grafický návrh aplikace existuje kvalitní GUI vývojové prostředí (nechuť k ručnímu vytváření formulářů apod).
  • Obsahuje třídy pro snadné vytváření tiskových sestav.
  • Podporuje alespoň základní zobrazení HTML.
  • Aplikace lze bez problémů lokalizovat (podpora locales).
  • Aplikace se dá přeložit do spustitelného kódu (aplikace poběží i na stanicích, kde není Python ani wxWindow nainstalován

Abychom mohli začít s následujícím příkladem, budeme potřebovat následující programy:

Prakticky vše se dá nalézt už připravené ve formě instalačních balíčků ve většině distribucí linuxu.

Vzhledem k tomu, že tyto články jsou určeny pro začátečníky, pro jejich úspěšné zvládnutí předpokládám nainstalované výše uvedené programy (je jedno, zda v linuxu nebo v MS Windows), alespoň základní znalost programování v jazyce Python a základní obsluhu počítače a myši.

Prvotní seznámení s Boa Constructorem

Než se dostaneme k vytvoření první jednoduché „pythonýrské” GUI aplikace, měli bychom se v první řadě seznámit s nástrojem, který budeme při jejím vytváření nejčastěji využívat. Takže si spusťte „Boa Constructor“.

Po jeho spuštění se vám vaše pracovní plocha rozdělí do několika oken. V horní části obrazovky se nachází tzv. „Paleta“ obsahující dvě sekce – „toolbar“ a záložky s jednotlivými wx komponentami. Pokud tuto paletu uzavřete, ukončíte Boa Constructor.

Boa 1 - 01

Po levé straně se nachází okno Inspektoru („Inspector“), která ukazuje konfiguraci aktuálně vybrané komponenty. Toto okno je aktivní, pouze když je spuštěn tzv. „Designer panel“.

Boa 1 - 02

Je rozděleno pomocí záložek na čtyři části:

  • Konstruktor („Constr“)
    slouží k editaci vlastností, které jsou vyžadovány pro vytvoření objektu (jméno, velikost, pozice a styl)
  • Vlastnosti („Props“)
    obsahuje ostatní vlastnosti objektu (barva, font, sizer, …).
  • Události („Evts“)
    umožňuje výběr událostí které jsou rozděleny do logických skupin (myš, klávesnice, …)
  • Objekty („Objs“)
    alternativně zobrazuje jednotlivé objekty, které jsou zobrazené v „Designer panelu“.

Další okno se nachází po pravé straně a nazýváme jej okno Editoru („Editor“). V tomto okně budeme např. provádět otevření, editaci a uložení zdrojového kódu.

Boa 1 - 03

Z tohoto okna budeme pomocí tlačítka designer - icon spouštět tzv. „Designer panel“, který nám umožní vizuální vytvoření a editaci jednotlivých formulářů.

To by pro prvotní seznámení s vývojovým prostředím Boa Constructor stačilo, další popisy a postupy již budou součástí jednotlivých příkladů.

První aplikace („Hello World“)

Přestože se tomu spousta autorů a programátorů brání, tak než se dostaneme k nějaké „smysluplné“ aplikaci, napíšeme si klasickou „Hello World“ včetně lokalizace a překladu do spustitelného kódu. Budu se snažit vše popsat tak, aby to byli schopni napsat i naprostí začátečníci.

V první řadě vám doporučuji, abyste si vytvořili adresářovou strukturu projektu tak, aby vypadala takto:

~/HelloWorld
     |-- i18n
     |     |-- cs_CZ
     |-- icons
     |-- lib
     |-- ui

Do podadresářů „lib a ui“ umístíme prázdný soubor s názvem „__init__.py“. Ačkoliv nebudeme v tomto případě využívat všechny výše uvedené adresáře, doporučuji je přesto vytvořit, např. pomocí příkazů:

mkdir -p ~/HelloWorld/i18n/cs_CZ ~/HelloWorld/icons ~/HelloWorld/lib ~/HelloWorld/ui
touch ~/HelloWorld/lib/__init__.py ~/HelloWorld/ui/__init__.py

Spustíme Boa Constructor a v okně „Editor“ v záložce „Explorer“ klikněte myší nad „root“ – rozbalí se vám cesty s adresáři. Najeďte na svůj domovský adresář. V pravé části okna pak stiskněte pravé tlačítko myši nad adresářem „HelloWorld“ a vyberte z rozbalovací nabídky volbu „Bookmark“. Tím jste si vytvořili „bookmark“ na váš adresář s projektem – umožní to později snadnější orientaci v souborovém systému.

Nyní začneme se samotným vytvářením naší první aplikace. V „Paletě“ (horní okno) v záložce „New“ clickněte na ikonu wx.App (wx.App), což má za následek vygenerování dvou souborů – objeví se jako záložky v „Editoru“. Všiměte si hvězdičky před a za názvem v záložce – znamená, že soubor není uložen. Zvolíme první (App1) a uložíme jej jako „App1.py“ do adresáře „~/HelloWorld“. Při uložení si pomůžeme bookmarkem – stačí v dialogu „Save as“ clicknout na „Top → Bookmarks → HelloWorld“. Poté zvolíme v „Editoru“ záložku „Frame1“ a uložíme jej do adresáře „~/HelloWorld/u­i“jako „frmHelloWorld.py“ (opakujeme předchozí postup).

Tím jsme si uložili vygenerované soubory a můžeme začít upravovat design samotného formuláře. Zkontrolujeme, zda máme v „Editoru“ zvolen „frmHelloWorld“ a klikněme na tlačítko designer - icon, čímž se nám spustí „Designer panel“.

V okně „Inspector (pravé okno) vyplníme v záložce "Constr“ položky „Name: frmHelloWorld“, „Size: wx.Size(164, 102)“ a „Title: Hello World!“ (viz. předchozí obrázek Inspectoru).

Nyní přidáme z „Palety“ (horní okno) ze záložky „Containers/Layout“ pomocí tlačítka wx.FlexGridSizer „wx.FlexGridSizer“. V okně „Inspectoru“ vyplníme v záložce „Constr“ položky „Cols: 1“, Name: szTop" a „Rows: 3“. Pak se přepneme na záložku „Props“, klikneme na položku „Growables (na tlačítko "…“ a zapneme kolonky podle obrázku:

Boa 1 - 07

a potvrdíme tlačítkem „OK“. Vrátíme se zpět k formuláři „frmHelloWorld“ (klikněme kdekoliv na tento formulář) a v okně „Inspector“ v záložce „Props“ v položce „Sizer“ vybereme „self.szTop“.

Poté přidáme z okna „Paleta“ (horní okno) ze záložky „Basic Controls“ položku „wx.StaticText“ wx.StaticText a v okně „Inspector“ v záložce „Constr“ změníme „Label: Hello World!“, „Name: stHello“ a „Style: wx.ALIGN_CENTRE“.

V okně „Paleta“ (horní okno) v záložce „Buttons“ zvolíme „wx.Button“ wx.Button (první tlačítko). Opět v okně „Inspector“ v záložce „Constr“ změníme „Label: &Close“, „Name: btClose“ a „wx.Size(75, 23)“. Dále pak v záložce „Evts“ zvolíme „ButtonEvent“ a klikneme na „wx.EVT_BUTTON“, čímž se nám vytvoří událost po kliknutí na tlačítko „OnBtCloseButton“.

Přesuneme se do okna „Editor“ a v záložce „Sizer“ dvakrát klikneme na „szTop“. Otevře se nám okno „szTop.Items“ a zde přidáme pomocí tlačítka „More new …“ More new ... volbu „Add spacer“. V oknu „Inspector“ v záložce „Constr“ změníme „Size: wx.Size(8, 18)“.

Opětovně se přesuneme do okna „szTop.Items“ a přidáme pomocí tlačítka „New“ New dvě položky. U první nastavíme v oknu „Inspector“ v záložce „Constr“ „Flag: wx.EXPAND | wx.ALL“ a „Window: self.stHello“ a u druhé „Flag: wx.ALIGN_CENTER_HO­RIZONTAL | wx.ALL“ a „Window: self.btClose“.

Tímto by měl být vytvořen design našeho formuláře. V oknu „Inspector“ clickneme na tlačítko End Designer panel, čímž ukončíme „Designer panel“. V okně „Editor“ v záložce „Source“ se přesuneme na funkci „OnBtCloseBut­ton(self, event)“ a upravíme ji následovně:

    def OnBtCloseButton(self, event):
        event.Skip()
        self.Close()

Nezapomeňte formulář „frmHelloWorld“ uložit. Přepneme se na záložku „App1“ a podzáložku „Source“. Zde upravíme řádek

import frmHelloWorld

na

import ui.frmHelloWorld

Dále pak upravíme řádek

        self.main = frmHelloWorld.create(None)

na

        self.main = ui.frmHelloWorld.create(None)

Opět nezapomeňte uložit „App1“. Nyní je již možné aplikaci spustit, buď pomocí tlačítka „Run application“ nebo z příkazové řádky. Výsledek našeho dnešního snažení by měl vypadat zhruba takto:

Boa 1 - 14

To je pro dnešek vše, příště budeme v této jednoduché aplikaci pokračovat a ukážeme si, jak na lokalizaci a překlad do spustitelného kódu. Zdrojové kódy k dnešní aplikaci si můžete stáhnout.

Školení: Návrh a používání MySQL databáze

 

Naučte se používat jednu z nejrozšířenějších databází. Dozvíte se vše potřebné od návrhu až po samotné využití MySQL v projektech.

Školení pro všechny, kteří se chtějí naučit efektivně pracovat s MySQL nebo se v práci s touto databází zlepšit.

Přihláška a podrobné informace

Ohodnoťte jako ve škole:
Průměrná známka 2,64

Přehled názorů

Každý názor musí mít titulek.
Jakub Hegenbart 15. 6. 2006 05:01
Nový
├ 
Re: Každý názor musí mít titulek.
Jakub Hegenbart 15. 6. 2006 05:02
Nový
├ 
Re: Každý názor musí mít titulek.
Pavel Šibal 15. 6. 2006 09:05
Nový
├ 
Re: Každý názor musí mít titulek.
Věra Rybářová 15. 6. 2006 09:57
Nový
└ 
Re: Každý názor musí mít titulek.
anonymní uživatel 16. 6. 2006 20:23
Nový
Boa vs. ??
Jachym Cepicky 15. 6. 2006 05:52
Nový
└ 
Re: Boa vs. ??
Pavel Šibal 15. 6. 2006 09:32
Nový
wxPython nedoporučuji
Adam 15. 6. 2006 05:55
Nový
├ 
Re: wxPython nedoporučuji
Petr Mach 15. 6. 2006 07:58
Nový
│
└ 
Re: wxPython nedoporučuji
Lord HeLLma 16. 6. 2006 07:05
Nový
│
 
└ 
Re: wxPython nedoporučuji
Lena 19. 6. 2006 13:13
Nový
├ 
Re: wxPython nedoporučuji
anonymní uživatel 15. 6. 2006 08:05
Nový
│
└ 
Re: wxPython nedoporučuji
anonymní uživatel 16. 6. 2006 00:18
Nový
├ 
Re: wxPython nedoporučuji
Pavel Šibal 15. 6. 2006 09:17
Nový
├ 
Re: wxPython nedoporučuji
Pavel Šibal 15. 6. 2006 09:35
Nový
├ 
Re: wxPython nedoporučuji
ava 15. 6. 2006 10:48
Nový
│
└ 
Re: wxPython nedoporučuji
Onyx 15. 6. 2006 12:34
Nový
│
 
└ 
Re: wxPython nedoporučuji
anonymní uživatel 15. 6. 2006 14:01
Nový
│
 
 
├ 
Re: wxPython nedoporučuji
razor 15. 6. 2006 14:47
Nový
│
 
 
├ 
Re: wxPython nedoporučuji
anonymní uživatel 15. 6. 2006 19:19
Nový
│
 
 
└ 
Re: wxPython nedoporučuji
anonymní uživatel 15. 6. 2006 19:22
Nový
├ 
Re: wxPython nedoporučuji
honza 15. 6. 2006 15:47
Nový
│
├ 
Re: wxPython nedoporučuji
anonymní uživatel 15. 6. 2006 19:30
Nový
│
├ 
Re: wxPython nedoporučuji
anonymní uživatel 15. 6. 2006 19:31
Nový
│
│
└ 
Re: wxPython nedoporučuji
honza 16. 6. 2006 00:49
Nový
│
│
 
├ 
Re: wxPython nedoporučuji
Pichi 16. 6. 2006 08:40
Nový
│
│
 
└ 
Re: wxPython nedoporučuji
Lena 19. 6. 2006 13:11
Nový
│
│
 
 
└ 
Re: wxPython nedoporučuji
honza 19. 6. 2006 23:12
Nový
│
│
 
 
 
├ 
Re: wxPython nedoporučuji
anonymní uživatel 20. 6. 2006 05:50
Nový
│
│
 
 
 
└ 
Re: wxPython nedoporučuji
Petr Mach 20. 6. 2006 13:09
Nový
│
└ 
Re: wxPython nedoporučuji
Jakub Hegenbart 15. 6. 2006 21:11
Nový
└ 
blabol
anonymní uživatel 16. 6. 2006 21:01
Nový
 
└ 
Re: blabol
Lena 19. 6. 2006 13:20
Nový
pyGTK?
drop 15. 6. 2006 08:19
Nový
├ 
Re: pyGTK?
Pavel Šibal 15. 6. 2006 09:19
Nový
└ 
Re: pyGTK?
Onyx 15. 6. 2006 12:46
Nový
 
└ 
Re: pyGTK?
Pavel Šibal 15. 6. 2006 13:36
Nový
BoaConstructor - hruza ?!
online 15. 6. 2006 09:29
Nový
└ 
Re: BoaConstructor - hruza ?!
Pavel Šibal 15. 6. 2006 09:45
Nový
 
└ 
Re: BoaConstructor - hruza ?!
Karlos 21. 6. 2006 20:30
Nový
Swing
Trained.Monkey 15. 6. 2006 09:35
Nový
├ 
Re: Swing
squix 15. 6. 2006 09:57
Nový
├ 
Re: Swing
anonymní uživatel 15. 6. 2006 10:41
Nový
├ 
Re: Swing
Onyx 15. 6. 2006 12:51
Nový
│
└ 
Re: Swing
Brabi 15. 6. 2006 17:40
Nový
│
 
├ 
Re: Swing
anonymní uživatel 15. 6. 2006 19:34
Nový
│
 
└ 
Re: Swing
anonymní uživatel 15. 6. 2006 19:37
Nový
└ 
Re: Swing
Michal Molhanec 15. 6. 2006 13:36
Nový
GPL ?
razor 15. 6. 2006 10:36
Nový
├ 
wxmozilla
razor 15. 6. 2006 10:41
Nový
└ 
Re: GPL ?
MikeP 15. 6. 2006 11:31
Nový
RAD Boa :-(
MikeP 15. 6. 2006 11:41
Nový
└ 
Re: RAD Boa :-(
Michal Molhanec 15. 6. 2006 13:38
Nový
 
└ 
Re: RAD Boa :-(
oldium 15. 6. 2006 16:46
Nový
moje zkusenosti
Michal Molhanec 15. 6. 2006 14:31
Nový
└ 
Re: moje zkusenosti
anonymní uživatel 15. 6. 2006 19:47
Nový
 
└ 
Re: moje zkusenosti
Michal Molhanec 15. 6. 2006 22:15
Nový
 
 
└ 
Re: moje zkusenosti
Lena 19. 6. 2006 13:28
Nový
 
 
 
└ 
Re: moje zkusenosti
Michal Molhanec 19. 6. 2006 14:02
Nový
 
 
 
 
└ 
Re: moje zkusenosti
Lena 19. 6. 2006 14:30
Nový
 
 
 
 
 
└ 
Re: moje zkusenosti
Michal Molhanec 19. 6. 2006 16:51
Nový
 
 
 
 
 
 
└ 
Re: moje zkusenosti
Petr Mach 20. 6. 2006 13:22
Nový
 
 
 
 
 
 
 
└ 
Re: moje zkusenosti
Michal Molhanec 20. 6. 2006 21:03
Nový
 
 
 
 
 
 
 
 
└ 
Re: moje zkusenosti
anonymní uživatel 21. 6. 2006 03:46
Nový
 
 
 
 
 
 
 
 
 
└ 
Re: moje zkusenosti
Michal Molhanec 21. 6. 2006 15:39
Nový
 
 
 
 
 
 
 
 
 
 
└ 
Re: moje zkusenosti
anonymní uživatel 21. 6. 2006 18:03
Nový
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: moje zkusenosti
Michal Molhanec 21. 6. 2006 19:03
Nový
wx nemá šanci na přežití
j 16. 6. 2006 13:19
Nový
└ 
Re: wx nemá šanci na přežití
Michal Molhanec 16. 6. 2006 14:20
Nový
 
└ 
Re: wx nemá šanci na přežití
Lena 19. 6. 2006 13:32
Nový
 
 
├ 
Re: wx nemá šanci na přežití
Michal Molhanec 19. 6. 2006 14:10
Nový
 
 
│
└ 
Re: wx nemá šanci na přežití
Lena 19. 6. 2006 14:15
Nový
 
 
│
 
├ 
Re: wx nemá šanci na přežití
Michal Molhanec 19. 6. 2006 16:39
Nový
 
 
│
 
└ 
Re: wx nemá šanci na přežití
Ku8aZ 29. 6. 2006 11:01
Nový
 
 
└ 
Re: wx nemá šanci na přežití
Pepa 29. 6. 2006 15:36
Nový
 
 
 
└ 
Re: wx nemá šanci na přežití
martin madera 30. 7. 2006 20:57
Nový
a co PyQt4?
wonder 16. 6. 2006 14:55
Nový
└ 
Re: a co PyQt4?
Pavel Šibal 16. 6. 2006 17:09
Nový
 
└ 
Re: a co PyQt4?
Lena 19. 6. 2006 13:33
Nový
proc se hadat
anonymní uživatel 27. 6. 2006 16:34
Nový
Valim bulvy
Ufon 29. 6. 2006 11:47
Nový
Tento seriál mě potěšil
Pavel Řezníček 11. 12. 2010 22:07
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem