Seite 1 von 1

wx.ListCtrl - 1. Columns - 2. Textfarbe

Verfasst: Freitag 1. Februar 2008, 15:15
von Frank aka Ch3ck3r
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")

Verfasst: Mittwoch 6. Februar 2008, 22:58
von HarryPython
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

Verfasst: Donnerstag 7. Februar 2008, 00:49
von noise
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