Feste Spaltenbreite im virtuellen ListCtrl

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

Feste Spaltenbreite im virtuellen ListCtrl

Beitragvon Blauer Fasan » Freitag 30. Mai 2008, 16:06

Guten Tag, zusammen!

Ich habe ein Problem, bei dem ihr mir hoffentlich helfen könnt:

Ich verwalte ein virtuelles ListCtrl mit den drei Spalten :
- Speicherstelle
- Inhalt
- Kommentar

Nun überlade ich die Methode OnGetItemText() um den Inhalt der einzelnen Zellen dynamisch einzufügen. Um dieses differenziert für die einzelnen Spalten zu tun, bekomme ich bei der überladenen Methode als Übergabeparameter einmal die Spalte(col) und den Item-Index(item) übergeben.
In relation zu den einzelnen Spalten möchte ich die Zellen füllen:

Code: Alles auswählen

if col == 0:
    return "Speicherstelle"

if col == 1:
    return "Inhalt"

if col == 2:
    return "Kommentar"


Das heißt im Klartext, dass ich testweise alle Zellen der Spalte Speicherstelle mit dem String "Speicherstelle" füllen will, für die anderen beiden Spalten gilt das gleiche.

Nun tritt aber das Problem auf, dass in der Spalte "Inhalt" einfach gar nichts steht, in den anderen beiden steht wie gewollt "Speicherstelle" und "Kommentar". Und es tritt wirklich der Fall ein, dass als col auch die 1 übergeben wird, habe ich nachgeprüft.

Nun habe ich mir mal ganz seltsam gedacht, versuchste das ganze halt mal "ohne" die Spalte mit dem Index 1: Habe also insgesamt vier Spalten angelegt, einfach die mit dem Index 1 im Header leer gelassen und ihre breite auf 0 gesetzt. Und schwupp-di-wupp, da ich die Spalte "Inhalt" auf den Index 2 und die Spalte "Kommentar" auf den Index 3 gesetzt habe, wird nun auch die Spalt "Inhalt" wie gewollt gefüllt.

Aber das kann es doch nicht sein, oder? Das muss doch einen Grund haben, dieses komische verhalten, ich kann mir das kaum erklären, und außerdem ist es, wie es jetzt gerade ist, ja wohl kaum ein Dauerzustand...

Naja, aber falls es doch dieser Zustand sein muss (was ich nciht wirklich hoffe), dann würde ich gerne erfahren, wie man den Benutzer daran hindern kann, die Leerspalte nicht in die Breite zu ziehen, damit dieser diese nciht zu Gesicht bekommt.

Ich bitte dringlichst um eure Hilfe und Eingebungen,
Gruß blauer Fasan
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.
Klugheit heißt sich zurückzuhalten, um zu sehen!
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Re: Feste Spaltenbreite im virtuellen ListCtrl

Beitragvon audax » Freitag 30. Mai 2008, 18:21

Code: Alles auswählen

return [
    "Speicherstelle",
    "Inhalt",
    "Kommentar",
    ][col]


scnr ;)
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

Beitragvon Blauer Fasan » Freitag 30. Mai 2008, 20:55

Gut, so würde es in dem Testfall funktionieren, aber wie mache ich das, wenn ich nicht einen festen String, sondern einen dynamisch ermittelten ausgeben will?

Also ich habe folgenden Code bei den einzelnen Spalten, was ausgegeben werden soll:

Code: Alles auswählen

        if col == 0:
            speicherstelle = hex(self.anfang + item)
            return speicherstelle
        if col == 1:
            speicherstelle = hex(self.anfang + item)
            inhalt = self.gibSpeicherInhalt(speicherstelle)
            return inhalt
        if col == 2:
            return "Hier kommt noch was anderes dynamisches hin"


Soll ich da etwa auch so eine Liste machen, wo ich dann die Ergebnisse der einzelnen Spalten-Ifs als Values angebe? Weil das wäre dann ja ein ziemlicher Rechenaufwand, wenn er das bei jedem Element tun müsste. Oder ist das nicht schlimm?
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.

Klugheit heißt sich zurückzuhalten, um zu sehen!
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

Beitragvon Blauer Fasan » Freitag 30. Mai 2008, 20:58

Ok, habe das jetzt so gemacht:

Code: Alles auswählen

return [hex(self.anfang + item), self.gibSpeicherInhalt(hex(self.anfang + item)), "Mnemonic"][col]


das scheint ganz sinnvoll, danke schön!
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.

Klugheit heißt sich zurückzuhalten, um zu sehen!
Benutzeravatar
Blauer Fasan
User
Beiträge: 49
Registriert: Montag 26. März 2007, 15:08
Kontaktdaten:

Beitragvon Blauer Fasan » Mittwoch 4. Juni 2008, 21:16

Ganz komisch, jetzt scheiterts doch wieder an dieser ominösen 2. Spalte. Und ich weiß nicht warum, habe das wie oben schon beschrieben wie du mit der Liste gemacht, klappt trotzdem nicht mehr. Habe nichts daran geändert...

Könnte das irgendwie an der Initialisierung der SPalte selbst liegen?
Ich weiß einfach nicht mehr weiter...
Dummheit heißt sich in den Vordergrund zu stellen, um gesehen zu werden.

Klugheit heißt sich zurückzuhalten, um zu sehen!

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder