Jo pouziti wxWindows je monstrozni, ale porad me neni jasny, proc zrovna wx? V prvnim dile pisete ze z duvodu prenositelnosti, ale ja treba pouzivam v pythonu gtk a to je taky prenositelne a monstrozni (jinak je ale pro python jeste prenositelnejsi tcl/tk).
Proc jste ve skutecnosti vybrali wx?
Pekne pozadi aplikace:-)
wxWindows pro podporovane systemy pouziva jejich nativni GUI (v Linuxu si dokonce muzeme vybrat). GTK+ funguje i na widlich, ale je to jen (s urcitou mirou nadsazky) "emulace X". Navic wxW udajne pracuji i v MSW 3.11, coz je pry pricinou velmi, velmi oskliveho C++ API (nutnost podpory starych kompilatoru). To ale nas, programatory v Pythonu, namusi moc palit..:)
Předevsim je nutne zduraznit, ze to je veci vkusu v cem budete programovat GUI pro sve aplikace v pythonu. Pokud se vam dari v gtk tvorte v teto knihovne. Mimochodem na platforme Linux je wxWindows nadstavbou nad GTK. Dulezite je, ze je wxWindows napsana v cecku, potazmo z 99% v C++ a je tudis vyrazne nativni v pouzivani systemovych prostredku dane platformy operacniho systemu a jeho grafickeho prostredi. Oproti Tkinteru, PythonWin .... ma nesrovnatelne vice implementovanych grafickych prvku, je dusledne objektova a pokud se naucite programovat ve wxPython nebudete mit zadne problemy prevest sve GUI pro program v C++, protoze je vse stejne a prakticky existuji pouze syntakticke rozdily zapisu mezi pythonem a C++. Jinak semantika je absolutne stejna. A to uz stoji za to. Pokud se pokusite o totez s Tkinterem, tak budete muse vymyslet znovu "kolo".
ok. mate presvedcive argumenty. jen ze gtk je psane v C a ma C++ wraper. Takze to vypada, ze wx by mohly byt i do budoucna ten pravy multipatformni toolkit? Rozhodnuti psat v tom ci v tom, je vzdycky vec mimoradne obtiznosti a rozhodtuti ma dalekohsahle nasledky.
jak je to pri techto nativnich kodech s pouzivanim systemovych prostredku? Jsou vyrazne mensi nez ma java?
wx ma port i v C++ a neni zas takova prace to s dobrym
cross-compilerem prelozit na ruzne architektury.
Na Vas dotaz asi neexistuje jednoznacna odpoved. Asi jako kdyz budete chtit vedet zda je lepsi krestanstvi nebo islam, je to proste vec vlastniho presvedceni. Musite si zvolit sam. Muzete porovnat doposud publikovane se zapisem pro C++:
class MyApp: public wxApp
{
virtual bool OnInit();
};
........
bool MyApp::OnInit()
{
MyFrame *frame = new MyFrame("Projekt", wxPoint
(50,50), wxSize(650,400));
frame->show(TRUE);
SetTopWindow( frame );
return TRUE;
}
Neni to zas az o nicem neznamem, ze? Zminujete se o pouziti cross-compileru, ale uprimne receno, vite co Vam to udela s Vasim kodem? Napsal jste si to sam, nebo se musite spolehat na druhe, ze to udelali dle Vasich predstav? Kdo se bude komu prispusobovat?
Dale k Vasemu dotazu s Javou. Je to trochu zavadejici, protoze o wxPython nebo wxWindows se bavime pouze jako o GUI nadstavbe pro urcity jazyk at uz Python nebo C++, kdezto Vas dotaz zahrnuje problematiku cele Javy jako celku. Java ma take sve GUI rozhrani na jine bazi nez je wxWindows a je urcena pro zcela jine veci nez Python nebo C a C++. Doporucuji prostudovat wxWorkshop, ktery zahrnuje jak C++ tak Java IDE. Pravda naprogramovat se da prakticky vse ve vsem.:)
Dale k tem systemovym prostredkum. Zkuste s Tcl/Tk prostredi pristupovat k direktivam preprocesoru?? Nebo neznam Tcl/Tk obdobu pouziti wxConfigBase na Unixu, wxIniConfig na 16bit Win, wxRegConfig na 32bit Win s primym pristupem k registrum atd. Dalsi neznamou pro Tkinter je treba OBDC Classes. Zkuste naprogramovat GUI rozhrani pro tisk dokumentu jak pro Unix/Linux tak pro Win9x,NT. V Tkinteru neznam. Pro srovnani doporucuji prostudovat dokumentaci k wxWindows a publikaci od Johna E.Graysona "Python and Tkinter Programming", zcela vycerpavajici srovnani. A pro uplne vycerpani doporucuji smrknout nasledujici:
http://www-106.ibm.com/developerworks/library/l-wxwin.html
http://www.wxwindows.org/screen01.htm
http://www.wxwindows.org/screen03.htm
http://www.ligo.caltech.edu/~e2e/Software/docs/wxWindows2/docs/html/odbc/odbc.htm
Jenze ja na sve projekty preferuju racionalni uvahy pred presvedcenim. Kdyby to bylo naopak urcite nebudu progranmovat ani v pythonu, ani v C++ ani v tave.
kody nemusite opisovat vcera jsem studiu wx zdrojaku venoval dost casu, dneska uz je v debianu i ta 2.40 verze tak to budu mozna i zkouset. Jo kod me vazne neni neznamy, je to vsude stejne, jen se to jinak pise:-) Bohuzel vsechny moderni jazyky jsou prakticky stejne az na nejake jemnosti ktere nepouzivam...
k jave, kdy se pise nejaky vetsi projekt, tak se obycejne deli na ruzne casti jako treba na infrasturkutu zabezpecujici neco a komunikujici s vyssimi prikazy treba pres pipy a nad tim vsim je nejake graficke rozhrani. takze tak jsem to myslel, jak pak nejaky takovy vetsi balik bude svizny, pojedem na cem atd.
Dulezitost Tcl je predevsim v tom, ze funguje bez problemu jak na Linuxu tak na vsech ostatnich unixech. Je to sivce pomale, ale funkcni. Jetsli ma nejake OBDC hazi sva data na CORBU nebo umi pristupovat k dovicemu v procesoru je nezjaimave, na to si muzu vzdycky napsat C routinu.
Dokonce ani python ani java nemaji bezne integrovane prihlizce ruznych obrazkovych formatu (tedy prakticky vse krome png,gif nebo jpegu). Takze s tim se pocita. Krom toho se da vzdycky vybrat jazyk nebo prosterdi ktere neco nepodporuje co podporuji ostatni.
Pro me je role pythonu predvesim jako nadstavba (graficky nebo webovy frontedn) a spojeni pro jine
jazyky nebo systemove zdroje.
Predem moc diky za pekny serial mam ale problem.
Pokud projekt spustim z prikazoveho radku funguje bezchybne. Pokud ho ale spustim z vyvojoveho prostredi IDLE 0.8 (WinXP) tak nenajde program prislusne soubory ulozene v aktualnim adresari. Poradte prosim jat prinutit IDLE (Python) aby prohledaval i adresar ve kterem je umisten spousteny program.
Diky Bohous
P.S.Autorovi se opet vloudila chybicka.V prikladu neni definovana promenna "Title" pouzita v 73 radku ale to je malickost. Moc se tesim se na dalsi pokracovani.
Musim upresnit pristup k demonstrovanym skriptum. Pominu-li druhy dil, kde doslo doopravdy v dusledku casove tisne k chybam zasadnim, skripty si musite skladat postupne za sebou a prispusobovat si je vlastnim potrebam. Na radku 73 je promenna "Title", ale zde myslena obecne. Muzete si ji definovat jako v predchozich castech kodu tj. globalne nebo zde rovnou dosadit "nazev vaseho projektu" ve forme retezce. Na druhou stranu mate asi pravdu, ze bude potreba, vse uvadet dusledneji, protoze jsem v pocatcich proklamoval, ze to bude serial pro zacatecniky a tak bych to mel asi vse vysvetlovat dusledneji a "po lopate". Otazkou je zda bych se pak vesel rozsahem do poctu planovanych clanku. To jen na okraj. A nyni k Vasemu dotazu k IDLE pod WinXP. Pokud mohu z vlastni zkusenosti, tak na to rovnou zapomente. IDLE je napsano v Pythonu s pouzitim Tkinteru na basi Tcl/Tk a pokud je mi znamo tak je relativne funkci do Win 95, 98, NT. Na Win2000 jiz byly znacne problemy a XP jsou uplne mimo. Je zde znacny problem s nastavenim systemovych promennych a cest. Navic se jedna o prostredi, ktere se meni ze dne na den a je v podstate ve stadiu alfa. wxWindows Vam ale stejne pod nim nepujde korektne, spise vubec vzhledem k tomu, v cem je IDLE napsano. Pokud potrebujete odladit sve skripty pod Windows, doporucuji PythonWin, ktery je soucasti kazde verze Pythonu a je nepomerne propracovanejsi a relativne stabilni.
Diky za odpoved.
Omlouvam se Vam za rypnuti ohledne "Title", nemyslel jsem to vubec zle, ale uvedeny priklad byl prave jen na tuto vyjimku bez uprav (neberu cisla radku) zcela funkcni a proto me to zamrzelo.
PythonWin jsem zkousel ale nejak mi nesedel a napriklad konkretne u uvedeneho prikladu mi pri spusteni projektu cely PythonWin spadne.
Nedalo mi to a trosku jsem si s tim pohral, nastesti je IDLE napsan v Pythonu, chvili to trvalo, ale po pridani dvou radku (nastaveni aktualniho adresare a prohledavani aktualniho adresare) do dvou modulu IDLE vse funguje jak ma.
P.S.:Nenechte se odradit rypalem jako jsem ja. Hodne uspechu ve vasi praci. Bohus
Pokud by nekoho zajimala uvedena uprava IDLE tady je:
V dokumentaci je uvedeno ,ze python pri behu prohledava adresare podle seznamu 'sys.path' a pokud je prvni prvek seznamu prazdny tak prohledava aktualni adresar. Ale pri vypisu toho seznamu v IDLE tam ten prazdny prvek chybel a krome toho po spusteni skryptu ,ktery vypise aktualni adresar se ukazalo, ze i ten aktualni adresar jiny nez umisteni daneho skryptu.
Takze v modulu 'PyShell.py' jsem za upravu promenne sys.path
' for i in range(len(sys.path)):
sys.path[i] = os.path.abspath(sys.path[i])'
pridal radek 732 :
sys.path.insert(0, '') ## Prohledavat aktualni adresar
a v modulu 'ScriptBinding.py' jsem pridal pred spustenim programu 'interp.execfile(filename)' radek 148:
os.chdir(os.path.dirname(filename))## Nastav pracovni adresar
Cisla radku odpovidaji me verzi IDLE 0.8. Radky maji mit prislusne odsazeni ale ta mi editor prispevku jaksy odstranil.
Mozna by se po skonceni behu skryptu mohl aktualni adresar nastavit na puvodni hodnotu ale zatim to nedela viditelne problemy tak jsem to neresil.
Pekny den Bohous
P.S.:Pokud by chtel nekdo primo upravene soubory at napise, rad muje poslu.
Musim priznat, ze se jedna o velmi podnetny prispevek, protoze jde o chybu zanesenou do vlastni instalace Python 2.2 v adresari "Tools/idle". Uvedenou upravu jsem odzkousel na vsech Windows 9x az po 2k a XP, je plne funkcni. Myslim, ze by stalo za to, upozornit autory "IDLE" pro dalsi distribuce Pythonu pod Windows. Proste "Windows jsou Windows", co dodat??
Vsechny Python toolkity jsou jen binding na toolkit v C/C++/Java/Tcl. Proste prizpusobujeme Python necemu jinemu, nez je navrzen. Proc to neudelat naopak? Napsat krasnej frontend a jemu priohybat jednotlive toolkity? Pokud znate anygui, vite o cem je rec. Ale anygui je ponekud tezkopadne.
PS: Pro nedockavce: Na moji domovske strance se uz brzo objevi takovyto vymysl, zatim je udelan backend pouze pro GTK+, ale jestli umite ve wxPythonu a mate dost rychly pocitac, muzete se mi ozvat. Rychly pocitac muzete nahradit pevnymi nervy :) (Vzhledem k probihajicimu zkouskovemu obdobi mozna odpovim az po delsi dobe.)
Nashledanou