Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

wxPython problem sa wxGrid-om

[es] :: Python :: wxPython problem sa wxGrid-om

[ Pregleda: 2626 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Au197/79
Zlatan Kadragić
Minhen

Član broj: 3556
Poruke: 772
*.ptt.yu

Sajt: aurelije.blogspot.com


+47 Profil

icon wxPython problem sa wxGrid-om24.07.2003. u 13:38 - pre 203 meseci
Radim u wxPython-u program za koji sam dobio ideju od HTTrack-a. Svidelo mi se što on stvara jedan index.html falj kojim objedinjuje razne projekte. Tako sam ja došao na ideju da napišem program koji će stvarati takve fajleove u pomoću kojih ću moći da povežem sve knjige i tutuorijal koje imam u elektronskom obliku (kao html, ps i pdf).

Već sam manje više ostvario ono što sam zamislio ali mi se javio jedan propust kojeg me mogu da se oslobodim a problem je više u domenu wx-a nego pitona.

Program parsira html fajlove i izdvaja iz njega linkove ka e-knjgama. On od svakog linka stvara objekat klase Veza sa atributom koji označava ime veze (tj. ono između <a ...> i </a>) i putanjom (ono u href). Ovi objekti se smeštaju u niz koji sam ja nazvao veze. Od atributa objekata u nizu vrši se popunjavanje tabele (wxGrid). Znači tabela samo odslikava niz veze.

Polja u 1. koloni tabele su imena veza i ona se mogu menjati. Kada se izmeni vrednost i kada se selektuje drugo polje tabele javlja se GrigCellChange događaj koji menja atribut u odgovarajućem objektu niza veze. Problem je u situacii kada se izvrši promena polja tabele, a ne selektuje se drugo polje. Tada nema GrigCellChange događaja. I ako se u toj situaciji pritisne neko od dugmića nastaje haos.

Počinje da se odigrava događaj vezan za to dugme (npr. Novi ili Otvori). On ili obriše ili učita nove objekte u niz veze. Tabela će prvo izbrisati sve redove da bi ih popunila sa novim stanjem niza veze. U toku tog brisanja će se okinuti GrigCellChange koji će ili pokušati da pristupi članu niza koji ne postoji => IndexError, ili će promeniti totalno deseti objekat klase Veza, koji pripada nekom drugom fajlu koji je u međuvremenu isparsiran.

Kako da napravim da se GrigCellChange javi čim se klikne negde van tabele i to pre nego što se javi događaj povezan sa elementom na koji se klikće?

Prikačio sam čitav program i napisao sam gomilu print naredbi iz kojih se vidi kako problem nastaje.
Bolje džaba ležat nego džaba radit.
Prikačeni fajlovi
 
Odgovor na temu

alex
Aleksandar Radulovic
Senior Software Engineer, Spotify
Stockholm, Sweden

Član broj: 71
Poruke: 2194
*.du.heimsnet.is

Jabber: alex@a13x.info
ICQ: -1
Sajt: www.a13x.info


+1 Profil

icon Re: wxPython problem sa wxGrid-om24.07.2003. u 21:22 - pre 203 meseci
Ovako iz glave, na tren sam pogledao kod, ali cini mi se da mozes da iskoristis EVT_KILL_FOCUS(func) dogadjaj.

Npr, u svoju klasu MojaMrezica, u __init__() metod probaj da dodas, odmah iza ostalih event deklaracija, nesto slicno ovome:

Code:

EVT_KILL_FOCUS(self, self.naPromenuPolja)


Time ce se funkcija naPromenuPolja() pozvati kada wxGrid izgubi fokus (odnosno kada neki drugi widget dobije fokus, u tvom slucaju, dugme).

Pregledacu detaljnije kod pa cu se javiti jos.

Poz,
alex.
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x
 
Odgovor na temu

Au197/79
Zlatan Kadragić
Minhen

Član broj: 3556
Poruke: 772
*.ptt.yu

Sajt: aurelije.blogspot.com


+47 Profil

icon Re: wxPython problem sa wxGrid-om26.07.2003. u 21:52 - pre 203 meseci
Ništa mi nije pomoglo jer se wxEVT_KILL_FOCUS javlja samo pri gašenju programa.
Bolje džaba ležat nego džaba radit.
 
Odgovor na temu

alex
Aleksandar Radulovic
Senior Software Engineer, Spotify
Stockholm, Sweden

Član broj: 71
Poruke: 2194
*.du.heimsnet.is

Jabber: alex@a13x.info
ICQ: -1
Sajt: www.a13x.info


+1 Profil

icon Re: wxPython problem sa wxGrid-om27.07.2003. u 02:17 - pre 203 meseci
Nije bas tacno, ali nema veze.. LM, evo koda koji provereno radi, dodaj event handlere na kraj svoje wxGrid klase i dodaj ove metode:

Code:

... u __init__()
    w=self.GetGridWindow()
    EVT_SET_FOCUS(w, self.OnSetFocus)
    EVT_KILL_FOCUS(w, self.OnKillFocus)

def OnKillFocus(self, evt):
    print "on kill focus"
    
def OnSetFocus(self, evt):
    print "on set focus"


Kada kliknes na wxGrid poziva se OnSetFocus(), a kad kliknes van wxGrid-a (bilo gde) poziva se OnKillFocus(). To je i ono sto tebi treba.

Poz,
alex.
Alex: My favorite site is http://localhost/
R.J. Oppenheimer: "I am become death, destroyer of worlds" (1945 AD)
tweet.13x ||
linkedin.13x
 
Odgovor na temu

[es] :: Python :: wxPython problem sa wxGrid-om

[ Pregleda: 2626 | Odgovora: 3 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.