wx.ListCtrl - 1. Columns - 2. Textfarbe

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Frank aka Ch3ck3r
User
Beiträge: 49
Registriert: Dienstag 13. November 2007, 21:56
Wohnort: Berlin
Kontaktdaten:

Hi,
ich habe ein Problem in wx.python mit dem widget wx.ListCtrl

Ich habe es geschafft eine ListCtrl zu erzeugen und diese mit Einträgen zu füllen

Code: Alles auswählen


        self.player_listbox = wx.ListCtrl(self.panel1,-1,pos=(5,5),size=(780,200),style=wx.LC_REPORT|wx.LC_VRULES)
#---snip---
            playername_co = self.player_listbox.InsertColumn(0,"Playername")
            self.player_listbox.SetColumnWidth(0, 200)
            playerteam_co = self.player_listbox.InsertColumn(1,"Team")
            self.player_listbox.SetColumnWidth(1, 120)
Soweit so gut, was ich nun einfach nicht hinbekomme ist, im Nachhinein die beschriftung "Playername" in "Playername *" zu ändern

Nun zu Problem 2
Ich versuche die Textfarbe eines Eintrages zu ändern (erfolgreich).
Das problem besteht daraus, das, siehe code oben, es 2 Spalten gibt.
Ich möchte die Farbe nur in der Rechten spalte ändern, sie ändert sich aber für die gesamte Reihe

Code: Alles auswählen


                item = self.player_listbox.InsertStringItem(row,player["name"])
                if player["team_int"] == 0:
                    self.player_listbox.SetItemTextColour(item,"black")
                elif player["team_int"] == 1:
                    self.player_listbox.SetItemTextColour(item,"red")
kostenlose TS2-Server für jeweils 31 Tage:
http://www.ts-onlyfree.de
HarryPython
User
Beiträge: 60
Registriert: Freitag 8. Juni 2007, 07:39

Hi Frank,

auch wenn es nicht wirklich Hilft, aber bei Problem 2 hab ich mich auch schon tot gesucht. Hab nie was gefunden und möchte behaupten es geht auch leider nicht.

Solltest du doch eine Lösung finden, bei der mal nicht auf den Monitor malen muss, poste es doch bitte. :lol:


Gruß
HP
noise
User
Beiträge: 62
Registriert: Donnerstag 7. Februar 2008, 00:15

Hallo Frank.

Zu 1:

Zeile 7 ist nur wichtig wenn du keine image liste zugewiesen hast. Warum? Bei jedem column wird implizit ``m_image`` auf 0 gesetzt (=image 0
in der image list) dass IMO ein Bug ist. Dadurch ergibt sich das wenn du ein item (vom Type ``wx.ListItem``) holst (Zeile 6) und es dann mit ``SetColum()`` setzt, das column heading beim resizen flackert. Ein neu setzen der Bitmaske hat da auch nicht geholfen.

Code: Alles auswählen

        lc = wx.ListCtrl(parent=panel, style=wx.LC_REPORT | wx.LC_VRULES)
        lc.InsertColumn(0, "Playername")
        lc.InsertColumn(1, "Team")
        self.lc = lc
        #
        item = lc.GetColumn(0)
        item.Image = -1
        # Alternativ kannst du ...
        ##item.SetText("Playername *")
        ##item.m_text = "Playername *"
        # benutzen.
        item.Text = "Playername *"
        lc.SetColumn(0, item)

Zu 2:
Ist leider in wxPython nicht möglich, weil sich ``SetItem`` in Gegensatz zu wxWidgets auf die Signatur ``SetItem(item)`` beschränkt. In wxWidgets ist die Signatur ``long SetItem(long index, int col, const wxString& label, int imageId = -1)`` und währe theoretisch damit möglich.


Lange rede kurzer Sinn, wenn es in wxPython ähnlich wäre (``SetItem(itempos, item)``) könnte man es so machen.

Code: Alles auswählen

item = lc.GetItem(0, 1)
item.BackgroundColour = "blue"
lc.SetItem(0, item)
HTH
noise
Antworten