[python] GUI - GTK

Ivo Štolpa pussa na pussa.cz
Pátek Červenec 15 08:41:48 CEST 2005


Petr Mach napsal(a):

> VANĚK Petr napsal(a):
>
>>> Osobně se mi zdá Tk uz ponekud zastarale. Neni prinosnejsi 
>>> investovat do uceni se neceho modernejsiho? Osobne doporucuji GTK. 
>>> Tim ze clovek pozna
>>> tutuo knihovnu nic neztrati ani kdyz pak zacne pouzivat treba jazyk C a
>>> muze ji bez problemu pouzivat pod Linuxem i Windows, a i na dalsich
>>> platformach, ale s tim nemam osobni zkusenosti.
>>
>>
>>
>> inu. v jadru s tim souhlasim. Je tu ale jedna, vlastne dve, 
>> zaludnost. Tk je - buhvi proc -
>> stale standardni GUI toolkit v Pythonu [1]. A druha, osobni, Gtk je 
>> skoro stejne peklo.
>> Konec invektivy. ;)
>>
>> poznamka [1] - sice to vyvojari tvrdi, ale na macu uz treba Tk 
>> implicitne neni...
>
>
> No, proc je TK standardni toolkit v Pythonu nechapu. Evidentne se nikomu
> nelibi, protoze navzdory tomu, ze je standardni soucasti a jeho pouzti
> je tak nejmene problemove, tak se temer nepouziva. Imho by se mel
> vyradit, jen zbytecne Python nafukuje.
>
> Co se ti nelibi na GTK? Ja jsem koukal na vic toolkitu a GTK mi vychazi
> jednoznacne nejlepe. Urcite to neni zadne peklo. Je schopny, dobre
> se v nem programuje, je dobre zdokumentovany, je dobre podporovany a 
> multiplatformni, je rozsireny, ma dobrou licenci. Aktivne ho pouzivam
> a nejsem si vedom zadneho nedostatku.
>
> Jen pro srovnani, tady je kompletni priklad demonstracni ukazky 
> zachazeni s CheckBoxy v PyGTK.
>
> = BEGIN =============================================================
>
> #!/usr/bin/python
> # -*- coding: utf-8 -*-
> import gtk
>
> # obsluha udalosti
>
> def printStatus(button, checks):
>     for check in checks:
>         if  check.get_active():
>             stat = "je zatržen."
>         else:
>             stat = "není zatžen."
>
>         print check.get_label(), stat
>
> def quit( event, data=None ):
>     gtk.main_quit()
>
> # GUI
>
> checks = []
> checks.append( gtk.CheckButton( label="První"  ))
> checks.append( gtk.CheckButton( label="Druhý"  ))
> checks.append( gtk.CheckButton( label="Třetí"  ))
> checks.append( gtk.CheckButton( label="Čtvrtý" ))
> checks.append( gtk.CheckButton( label="Pátý"   ))
>
> button = gtk.Button( label="Vytiskni stav" )
> button.connect( 'clicked', printStatus, checks )
>
> vbox = gtk.VBox()
> for check in checks: vbox.pack_start( check )
> vbox.pack_start( button )
>
> win = gtk.Window()
> win.set_border_width( 10 )
> win.connect( 'destroy', quit )
> win.add( vbox )
> win.show_all()
>
> # cekani na udalost
>
> gtk.main()
>
> = END ===============================================================
>
> Vystup je takovy:
>
> [wraith na frodo ~]$ python checks.py
> První je zatržen.
> Druhý není zatžen.
> Třetí je zatržen.
> Čtvrtý není zatžen.
> Pátý je zatržen.
>
> Obrazek aplikace posilam prilohou. Vskutku si myslim, ze GTK toolkit
> je snadny na pouzivani (a to nezminuji glade, v kterem si GUI navrhnes
> vizualne a v pythonu dopises obsluhu udalosti) i nauceni se.
>
>------------------------------------------------------------------------
>
>_______________________________________________
>Python mailing list
>Python na py.cz
>http://www.py.cz/mailman/listinfo/python
>
Já používám GTK teď již více jak rok a mohu potvrdit Petrova slova. Na 
GTK se mi líbí mnoho věcí nejvíce však wrapper PyGTK. Ten je opravdu 
pytonní. GTK se díky jemu stává opravdovou součástí Pythonu a ne jen 
nějakou externí knihovnou. Když jsem začínal, tak Tk jsem zavrhl vlastně 
ihned. Qt jsem kvůli nešťastnému licencování pod Windows musel vynechat 
taky. Asi nejrozsáhlejší wx jsem nakonec zavrhl protože práce s ní i v 
pythonu je moc C++ (toto je prosím jen můj názor člověka, který prostě 
nemá rád C++) a tak nakonec vyhrálo menší a jednodušší GTK. Za celý rok 
jsem nelitoval. Na GTK mne mrzí jen dvě věci. 1. že neumí (nebo jsem na 
to nepřišel) zobrazit html stránku v okně GTK.  2. že nemá svůj vlastní 
tiskový mechanismus s preview (wx ho má). Kolem druhého bodu se poslední 
dobou něco děje, ale zatím je brzy na nějaké závěry. Teď to řeším 
knihovnou reportlab a zobrazením výsledného pdf v externím programu.

Kdyby bylo na mě, tak bych Tkiner z Pythonu vyřadil. Jeho přítomnost je 
čistě historická. I když mě nevadí, protože na disku mám místa dost a 
pro distribuci uživatelům používám McMillan Install a tam se Tkiner 
nepřibalí, pokud jej nepoužiji.

Pokud na wiki vznikne nejaký základ o používání GTK, rád jej doplním i 
svými poznatky.

Ivo

-- 
Ing. Ivo Štolpa

***********************************************
PUSSA software, Žižkova 13, 58601 Jihlava
e-mail: pussa na pussa.cz, ivo.stolpa na seznam.cz
stránky: http://www.pussa.cz
mobilní telefon: 602 735 124
pevná linka: 567 320 386
fax: 602 783 071
***********************************************





Další informace o konferenci Python