přihlásit 4405/589209

Toolkity obecně

K tvorbě GUI aplikace je potřeba nějaký GUI toolkit, což je knihovna pro tvorbu grafického rozhraní. Takových knihoven je celá řada, a není lehké se rozhodnout, která je ta pravá.

TK

Jeden GUI toolkit je dokonce součástí instalace Pythonu. Jedné se o TK, které je znám především ve spojení TCL/TK. TK je ale poněkud zastaralý a nepříliš hezký, takže jeho jediná výhoda je, že je součástí Pythonu. Na malé jednoduché GUI prográmky může být dostačující, ale většina lidí dá asi přednost něčemu plnohodnotnějšímu.

GTK+ / PyGTK

Jeden z nejlepších GUI toolkitů vůbec a pro Python obzvlášť je GTK+ [1]. Dominuje především na Linuxu, kde ho používá řada aplikací, včetně těch nejznámějších, jako je Firefox, GIMP, Inkscape, Gaim a také celé desktopové prostředí GNOME, pod jehož hlavičkou se GTK+ nyní vyvíjí. Tento výčet aplikací je snad dostatečnou známkou kvality a vyzrálosti tohoto toolkitu.

GTK je ale multiplatformní, je portován pro Windows [2], skrz X server je použitelný v Mac OS a právě se pro něj vytváří nativní port [3]. Mohou ho používat aplikace napsané v Javě, je portován i pro .NET a mono jako GTK# [4]. GTK+ používá i prostředí MAMEO, což je vývojové prostředí pro kapesní počítače, jako je Nokia 770 Internet Tablet [5]. Dále GTK využívá prostředí GPE Palmtop Environment [6] což je alternativní grafické prostředí pro palmy a kapesní počítače jako HP Jornada 72x, iPAQ nebo Sharp Zaurus. GTK bude používat i Access Linux Platform [7], což je nový operační systém, který nahradí PalmOS.

V Pythonu je GTK+ přístupné přes binding PyGTK [8], který je proveden velmi kvalitně a využívá všech možností a vlastností Pythonu, takže jeho používání v Pythonu je snadné a přirozené.

GTK+ vzniklo původně pro projekt Gimp v dávných dobých, kdy pro Linux neexistoval žádný použitelný toolkit s otevřenou licencí. Na tomto toolkitu pak následně začalo stavět i významné desktopové prostředí GNOME. Před několika lety bylo GTK+ uznáno jako za zastaralé a nesplňující požadavky na tvorbu moderních aplikací a bylo významně modernizováno. Tak vznikla druhá série GTK+, nekompatibilní se starým GTK+, ale zato s podporou moderních technologií, jako vyhlazování písma, přístupností pro postižené uživatele a především podporou UNICODE.

Tato druhá série GTK+ zahrnuje stabilní verze 2.0, 2.2, 2.4, 2.6 a 2.8 (2.10 je na spadnutí). Tyto všechny přísně udržují zpětnou kompatibilitu. Funkčnost a API se nemění, pouze rozšiřuje. Aplikace napsaná pro GTK+ 2.0 tak bez problému poběží na GTK+ 2.8.

U verze 2.8 došlo k velmi významné změně, jako grafický backend byla použita vektorová knihovna Cairo [9], která bude mít ohromný přínos. Nejen že umožní vektorizaci GUI (tedy např. plynulé zvětšování), ale také jednotný výstup na obrazovku i tiskárnu (PDF, PS), umožní hw akceleraci na Open GL grafických kartách a podobně. Toto je však zatím hudba blízké budoucnosti. V 2.8 se Cairo používá pouze na místo původního bitmapového rendereru. Nové možnosti které nabízí Cairo budou využity až časem s dalším vývojem GTK+.

Přes řadu silných stránek není GTK+ dokonalé. Proti GTK+ hovořila absence podpory tisku. Na Linuxu to moc nevadilo, tam je GTK+ úzce svázáno s GNOME a tisk řeší modul gnome-print, který GTK+ o tuto vlastnost rozšiřuje. V případě Windows to mohl být důvod se poohlédnout po něčem jiném. Tento nedostatek byl právě vyřešen v čerstvém GTK+ 2.10, který vyšel [10] právě dnes (4. 7. 2006). PyGTK pro tuto verzi zatím neexistuje, ale to je jen otázka krátkého času, protože pro vývojové GTK 2.9 i s podporou této funkcionality již existuje a dokonce i dokumentace k PyGTK už má tuto novou funkcionalitu popsánu.

Další důvod k odmítnutí GTK+ by mohla být horší podpora GTK+ v Mac OS X. V něm lze GTK+ aplikace spouštět pouze pomocí X Serveru, protože zatím nemá nativní port, na kterém se, jak už jsem uvedl, teprve pracuje.

Od příznivců Qt jsem slyšel dále, že GTK+ je pomalé. Programoval jsem jednu GTK+ aplikaci na historickém notebooku s Pentiem 233 MHz, žádnou pomalost jsem nepozoroval. Možná je Qt rychlejší, ale jestli to není pozorovatelné, tak co to je za argument? S další námitkou, špatná dokumentace, nesouhlasím, GTK i PyGTK je dokumentováno skvěle. Tohle tvrzení možná vychází z toho, že Qtčkáři programují v C++ a tak se nezajímají o samotné GTK+, ale o GTKMM, což je binding do C++ a ten má možná dokumentaci horší, nevím, C++ nepoužívám. Poslední výtka, že Qt je mnohem intuitivnější je jen o zvyku. Mně, který znám GTK, zase neintuitivní a těžkopádné připadá Qt. Ale abych nebyl nařčen z neobjektivnosti, nechal jsem zde tyto názory zaznít, i když s nimi nesouhlasím. Možná je někdo duchem Qtčkář a bude s nimi ve shodě.

Qt / PyQt

Jak už jste asi pochopili, Qt [11] toolkit je největší konkurence GTK+. Na Linuxu jej používá desktopové prostředí KDE, z ne-KDE aplikací pak Opera, o žádné další nevím. Není to jen GUI toolkit, obsahuje podporu pro databáze, XML a podobně, čímž dubluje funkcionalitu Pythonu. GUI toolkit je sám o sobě pravděpodobně kvalitní, ale silně proti němu mluví licenční podmínky, takže jsem se jím hlouběji nezabýval. Qt má tyto čtyři edice:

První tři jsou dostupné pouze s drahou [12] komerční licencí. Poslední je dostupná s licencí GPL a u Linuxu ještě QPL. Háček je v tom, že programy které používají GPL knihovny musí být samy také šířeny pod GPL licencí, tedy musí být volně šiřitelné včetně zdrojových kódů. Pokud tohle nechcete, pak na Linuxu můžete použít QPL licenci a pro všechny ostatní platformy si musíte koupit komerční licenci. To je hodně omezující.

GTK+ je šířen pod LGPL licencí a takové omezení neklade. Může být použit v projektu s libovolnou licencí a sám je volně šiřitelný a zdarma. Proto osobně preferuji GTK+.


Seznam URL na stránce:
[1] http://gtk.org/
[2] http://gladewin32.sourceforge.net/modules/news/
[3] http://developer.imendio.com/wiki/Gtk_Mac_OS_X
[4] http://www.mono-project.com/GtkSharp
[5] http://en.wikipedia.org/wiki/Nokia_770_Internet_Tablet
[6] http://en.wikipedia.org/wiki/GPE_Palmtop_Environment
[7] http://en.wikipedia.org/wiki/Access_Linux_Platform
[8] http://www.pygtk.org/
[9] http://cairographics.org/
[10] http://gnomedesktop.org/node/2712
[11] http://www.trolltech.com/products/qt/index
[12] http://www.trolltech.com/products/qt/licenses/pricing

Parse error: syntax error, unexpected T_STRING in /web/htdocs2/wraithcz/home/www/python/data/sessions/sessions1.php on line 2