[Tutor PyCZ] tkinter X wxpython - pohled zacatecnika

Petr Prikryl PrikrylP na skil.cz
Úterý Říjen 17 11:06:54 CEST 2006


superman
> sebastian
> > [nejdříve se tázal, jaké GUI zvolit]
> > Asi bych se mel trochu rozepsat o tom co vlastne hledam.
> > [...] Ale ted mam casu malo ;-) a kdyz uz do neceho 
> > investuji svuj cas chci aby se to v budoucnu dalo pouzit 
> > na co nejvice veci (proto se taky ucim Python a ne 
> > "nove" C++ ;-)).
> > [...] vim ze neexistuje jednoznacna odpoved ale jde 
> > o to co je prespektivnejsi, univerzalnejsi a efektivnejsi
> > [...]

wx znamená Windows/uniX (možná X-window) a už z principu
se od Tkinter liší tím, že neexistuje "nějaký" toolkit, který
se snaží napasovat do "cizího" operačního systému. Místo 
toho se snaží hledat to, co je v různých OS obecné. Zakládá
abstrakce (jako třeba "událost"), které principiálně musí
existovat, ale které může každý OS řešit jinak. wxWidgets
tím posunuje úroveň abstrakce směrem k vyšším hladinám 
a zakrývá před programátorem nutnost řešit související
problémy. To je podle mého názoru jediná do budoucna 
udržitelná cesta -- vytvořit abstrakce nezávislé na konkrétním 
prostředí. Uživatel (programátor) musí být osvobozen od věcí, 
které jej nemusí zajímat. Může pak uvažovat v abstrakcích, 
které jsou principiální a zadávat jen principiálně důležité
věci.

wxWidgets tedy budují abstraktní základy, na kterých 
je celé GUI postaveno. Jedním z praktických důsledků
je právě to, že výsledek vypadá přirozeně v každém OS.

Druhý praktický důsledek je ten, že se to pak pod různými
OS programuje stejně. Tím mám na mysli způsob uvažování
a výstavby programu při jeho tvorbě. Jako ilustrační protipól
bych uvedl MS Windows a využití starých překladačů C++
(Borland + OWL starší) a novějších překladačů C++: 
Borland + OWL, MSC + Petzold like, MSVC + ATL, MSVC + WTL, 
MSVC + MFC, MSVC + .NET framework), kdy každá kombinace
vyžaduje jiný styl práce.

Třetí praktický důsledek -- mnozí to již pochopili
a proto je kolem wxWidgets taková aktivita.

> [...] moje zkušenosti jsou takové, že ačkoli Vám kdekdo 
> poradí, stejně narazíte na problémy. [...]
> U wxPython tyhle problémy nejsou, ale jsou problémy jiné. 
> Například v případě chyby se otevře okno, vypíše se chyba, 
> okno se okamžitě zavře a aplikace se ukončí. Výborný kurs 
> rychločtení, akorát se mi fakt ještě nepovedlo přečíst 
> popis chyby za desetinu sekundy... Takže pokud budete 
> psát bezchybné programy jste z obliga :-)

Je jasné, že tohle není a nemůže být problém jediného
člověka a že to asi někdo řešil a vyřešil. Možná se stačilo
jen zeptat.

Zdá se, že u Python 2.5 a odpovídající verze wxPython
už to funguje lépe (se mi zdá). Ale už dříve se to dalo 
vyřešit pouhým použitím parametru při konstrukci aplikačního
objektu. Pokud hlavní spouštěný skript končí třeba takhle...

def main():
    app = App()
    app.MainLoop()


if __name__ == '__main__':
    main()

a jen to problikne, stačí při ladění spustit aplikaci
z terminálového okna explicitně příkazem "python main.py".
Pokud to nevyhovuje, stačí změnit implicitní parametr na 

    app = App(True)

případně dokonce

    app = App(True, 'err.log')

Na přečtení výpisu o chybě pak bude dost času.

pepr


Další informace o konferenci Tutor