ListCtrl - EditLabel

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Puthy
User
Beiträge: 4
Registriert: Samstag 17. Februar 2007, 21:30
Kontaktdaten:

Hiho,

ich habe mir eine GUI gebastelt, bei der unter anderem eine Liste vorhanden ist, die 2 Spalten besitzt. Nun möchte ich Einträge in der 2. Spalte ändern. Einträge in der 1. Spalte - das geht ja wie von alleine aber irgendwie komm ich einfach nicht an die 2. ran.

Der Aufbau der Liste ist wie folgt:

Code: Alles auswählen

    def setListe(self):
        self.panel3=  wx.Panel(self, -1, pos = (601,191) ,size =(250,540))
        self.liste = wx.ListCtrl(self.panel3, 999, pos = (01,01), size = (200,360),
            style=wx.LC_REPORT | wx.BORDER_NONE #| wx.LC_EDIT_LABELS
                                              #| wx.LC_VRULES | wx.LC_SORT_ASCENDING
                                              | wx.LC_HRULES)
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.EvtListe, id=999)
        self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.EditListEntry, id=999)

        self.liste.InsertColumn(0, "Eintraege")
        self.liste.InsertColumn(1, "Second")
##        self.liste.InsertColumn(2, "Third")
        self.liste.SetColumnWidth(0, 100)
        self.liste.SetColumnWidth(1, 100)
##        self.liste.SetColumnWidth(2, 50)
        #Erstellen der Uhrzeiten in der Liste
        for i in range(24):
            von = 23-i
            if von <= 9:
                von = "0"+str(von)
            bis = 23-i+1
            if bis <= 9:
                bis = "0"+str(bis)
            self.liste.InsertStringItem(0,str(von)+":00 - "+str(bis)+":00")
Die erste Spalte gibt immer die Uhrzeiten an und in der 2. stehen Einträge aus einer DB.[/code]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Puthy hat geschrieben:Nun möchte ich Einträge in der 2. Spalte ändern.
Hallo Puthy!

Willkommen im Python-Forum!

Ich bin heute schon zu müde, deshalb nur ein kurzer Tipp:

Suche in der wxPython-Demo nach "ListCtrl_edit". Vielleicht hilft dir das schon weiter.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Hi Puthy und willkommen im Forum.

Einträge in einem ``ListCtrl`` macht man anders.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import wx
wx.SetDefaultPyEncoding("utf-8")

FOO_IDX = 0
BAR_IDX = 1
FOOBAR_IDX = 2
 
class MainFrame(wx.Frame):
    def __init__(self, 
        parent = None, 
        id = -1, 
        title = "MainFrame",
        pos=wx.DefaultPosition,
        size = (300, 400), 
        style = wx.DEFAULT_FRAME_STYLE
    ):
        wx.Frame.__init__(self, parent, id, title, pos, size, style)
        self.Center()
        self.panel = wx.Panel(self)
        
        lc = self.listCtrl = wx.ListCtrl(self.panel, -1,
            style=wx.LC_REPORT |
                  wx.BORDER_NONE |
                  wx.LC_EDIT_LABELS |
                  wx.LC_SORT_ASCENDING
        )
                
        lc.InsertColumn(FOO_IDX, "Foo")
        lc.InsertColumn(BAR_IDX, "Bar")
        lc.InsertColumn(FOOBAR_IDX, "Foobar")
        
        for i in (1, 2, 3, 4, 5, 6, 7, 8, 9):
            # Wenn man nun z.B. 9 "Elemente" zum ListCtrl hinzufügen will,
            # wobei alle Spalten einen Wert enthalten sollen, muss man den
            # erste Wert mit ``InsertStringItem`` hinzufügen und dann den 
            # Index entgegennehmen. Der Index gibt die Position des
            # Elementes in der Liste an.
            #
            # Hier wird nun ein Wert zu Spalte Foo hinzugefügt.
            index = lc.InsertStringItem (FOO_IDX, "foo %d" % i)
            # Wenn wir nun auf gleicher Elementposition Bar und 
            # Foobar einen Wert geben wollen, muss ``SetStringItem`` 
            # benutzt werden, das als
            # ersten Parameter einen Index (Position) des gewünschten 
            # Elementes in der Liste erwartet.
            lc.SetStringItem(index, BAR_IDX, "bar %d" % i)
            lc.SetStringItem(index, FOOBAR_IDX, "foobar %d" % i)
        
        #
        vbox = wx.BoxSizer(wx.VERTICAL)
        self.panel.SetSizer(vbox)
        vbox.Add(lc, 1, wx.EXPAND | wx.ALL, 5)

            

def main():
    app = wx.PySimpleApp()
    mf = MainFrame()
    mf.Show()
    app.MainLoop()
 
if __name__ == "__main__":
    main()
Puthy
User
Beiträge: 4
Registriert: Samstag 17. Februar 2007, 21:30
Kontaktdaten:

Danke für das sehr gut erklärte Beispiel. Wird so bald wie möglich umgesetzt. Und... auch ein Hallo von meiner Seite :)
Antworten