Event-Handling eines ListControls; Sortierung vornehmen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

Montag 18. Juni 2007, 18:57

Hallo Leute!

Ich habe folgendes Problem:

Ich möchte eine GUI-Applikation schreiben, die LogFiles von SnakeServern analysiert und anzeigt. Hierzu arbeite ich mit einer Datenbank (Sqlite), in ihr werden die Datensätze gespeichert. Nun werden die einzelnen Abschnitte der Einträge (Date, Time, Module, Event, Message) in den einzelnen Spalten des ListControls angezeigt. Hier nun die Frage:
Wie schaffe ich es zu wissen, dass jemand auf einen Spaltenkopf drückt, um die Einträge nach dieser Spalte zu sortieren? Denn wenn jemand z.B. auf "Time" drückt, möchte ich die Einträge nach den Werten in dieser Spalte Datenbankseitig sortieren.

Kann sein, dass es völlig banal ist...

Kann man zum Beispiel diese Spalten des ListControls beim Hinzufügen einfach an eine Methode "binden" mit der man denn das Event verarbeitet?

Ich würde mich über Ratschläge freuen, und wenn ihr noch mehr Informationen braucht, oder ich quatsch erzähle, bitte höflichst darauf hinweisen ;).

Danke schon einmal im Voraus... :)
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.
Klugheit heißt sich zurückzuhalten, um zu sehen!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 18. Juni 2007, 19:13

Blauer Fasan hat geschrieben:Wie schaffe ich es zu wissen, dass jemand auf einen Spaltenkopf drückt, um die Einträge nach dieser Spalte zu sortieren?
Hallo Blauer Fasan!

So geht es:

Code: Alles auswählen

        listctrl.Bind(wx.EVT_LIST_COL_CLICK, self.on_list_col_click)
    
    def on_list_col_click(self, event):
        print event.GetColumn()
        event.Skip()
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

Montag 18. Juni 2007, 19:22

Vielen Dank für die rasche Antwort!

Wie sieht es aus, brauche ich keine ID zu übergeben, da ich mit zum Beispiel (so würde es jetzt bei mir aussehen)

Code: Alles auswählen

self.list.Bind(wx.EVT_LIST_COL_CLICK, self.onColumn)
das gesamte ListControl, also alle Spalten mit der Event-Methode verknüpfe?
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.
Klugheit heißt sich zurückzuhalten, um zu sehen!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 18. Juni 2007, 19:27

Blauer Fasan hat geschrieben:Wie sieht es aus, brauche ich keine ID zu übergeben, da ich mit zum Beispiel [...] das gesamte ListControl, also alle Spalten mit der Event-Methode verknüpfe?
Hallo Blauer Fasasn!

Das Event wx.EVT_LIST_COL_CLICK wurde mit ``Bind`` an den Event-Handler gebunden. Der Event-Handler ist eine Funktion, die als Parameter das Event übergeben bekommt. Das Event ist ein Objekt, an das viele verschiedene Methoden gebunden wurden. Eine der Methoden heißt ``GetColumn()``. Und damit bekommst du raus, auf welche Spalte geklickt wurde.

Ich mache mir die Sache immer ziemlich einfach. Wenn ich nicht weiß, was ich so vom Event übergeben bekomme, dann schreibe ich im Event-Handler:

Code: Alles auswählen

print dir(event)
Und damit weiß ich was ich so zurück bekomme. Die Funktionsnamen sind meist sehr Aussagekräftig. Und wenn man nicht weiß wie man mit den Funktionen umgehen soll, dann kann man ja immer noch in der wxWidgets-Dokumentation (NICHT wxPython!!!) nachsehen.

- http://wxwidgets.org/manuals/stable/wx_wxlistevent.html
- http://wxwidgets.org/manuals/stable/wx_contents.html

mfg
Gerold
:-)
Zuletzt geändert von gerold am Montag 18. Juni 2007, 19:31, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

Montag 18. Juni 2007, 19:31

Dankeschön!

Eine letzte Frage, wozu dient das

Code: Alles auswählen

event.Skip()
?
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.
Klugheit heißt sich zurückzuhalten, um zu sehen!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 18. Juni 2007, 19:40

Blauer Fasan hat geschrieben:Eine letzte Frage, wozu dient das ``event.Skip()``?
Hallo Blauer Fasan!

Wenn du einen Event-Handler für ein Event hast, dann wird nach dem Übergeben des Events an den Handler, das Event nicht mehr an andere Event-Handler weiter gegeben. Was bei Command-Events meistens kein Problem ist, ist bei anderen Events sehr wohl manchmal ein Problem. Wenn du z.B. das Event wx.EVT_KEY_DOWN abfängst und im Handler die Verarbeitung des Events nicht mit ``event.Skip()`` weiter gibst, dann hast du zwar den Tastendruck abgefangen, aber im Steuerelement wird nichts angezeigt. Warum? Weil das Event nicht mehr bis zum dafür zuständigen, eingebauten Event-Handler durchgekommen ist.

--> http://wxwidgets.org/manuals/stable/wx_wxevent.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

Montag 18. Juni 2007, 20:06

Dankö, du hast mir wirklich weitergeholfen Gerold! ;)
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.
Klugheit heißt sich zurückzuhalten, um zu sehen!
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 18. Juni 2007, 21:46

Blauer Fasan hat geschrieben:"Wer kämpft kann verlieren, wer nicht kämpft hat schon verloren"
Hallo Blauer Fasan!

Wer kämpft kann verlieren, wer nicht kämpft muss sich darüber keine Gedanken machen.

Wer sich verteidigt kann verlieren, wer sich nicht verteidigt hat schon verloren.

Wie auch immer. Es gibt für jeden Scheiß einen Spruch. Mindestens einen dafür und mindestens einen dagegen.

mfg
Gerold
:-)

Edit: Na wie bin ich denn schräg drauf, heute!?? Nichts für ungut.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten