Seite 1 von 1

Verständnisproblem: TreeCtrl

Verfasst: Sonntag 3. August 2008, 19:26
von Cobra5
Hallo allerseits,

Wie gesagt habe ich ein kleines Verständnisproblem. Hier erstmal mein Pythoncode:

Code: Alles auswählen

#!/usr/bin/python

import  wx

class Main_Window(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title, size=(800, 600))
        panel = wx.Panel(self, -1)
        
        # - Imageliste wird erstellt.
        isz = (16,16)
        il = wx.ImageList(isz[0], isz[1])
        fldridx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FOLDER,
              wx.ART_OTHER, isz))
        fldropenidx = il.Add(wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN,
           wx.ART_OTHER, isz))

        # - Icon wird erstellt.
        icon = wx.Icon('icons\Note.ico', wx.BITMAP_TYPE_ICO)        
        self.SetIcon(icon)
        
        # - TreeCtrl wird erstellt.
        self.tree = wx.TreeCtrl(panel, -1, size=(400, 600),
         style=wx.TR_NO_BUTTONS )
        self.tree.SetImageList(il)
        
        # - Rootfenster wird erstellt.
        self.root = self.tree.AddRoot("Musik")
        self.tree.SetPyData(self.root, None)
        self.tree.SetItemImage(self.root, fldridx, wx.TreeItemIcon_Normal)
        self.tree.SetItemImage(self.root, fldropenidx, wx.TreeItemIcon_Expanded)
        
        # - Item wird erstellt.
        child = self.tree.AppendItem(self.root, "Item %d" % 1)
        self.tree.SetPyData(child, None)
        self.tree.SetItemImage(child, fldridx, wx.TreeItemIcon_Normal)
        self.tree.SetItemImage(child, fldropenidx, wx.TreeItemIcon_Expanded)
        
        self.tree.Expand(self.root)

        self.Centre()
        self.Show(True)

app = wx.PySimpleApp()
Main_Window(None, -1, 'Fenster')
app.MainLoop()
Ich will bei meinem TreeCtrl Bilder anzeigen lassen (aufgeklappter und geschlossener Ordner). Mit dem aktuellen Code werden jedoch keine Bilder, sondern nur leere Freiräume angezeigt.

Habe mir dann mal die wxPython - Docs angeschaut. Habe dann folgende 3 Events zu meinem Programm hinzugefuegt.

Code: Alles auswählen

        self.Bind(wx.EVT_TREE_ITEM_EXPANDED, self.OnItemExpanded, self.tree)
        self.Bind(wx.EVT_TREE_ITEM_COLLAPSED, self.OnItemCollapsed, self.tree)
        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, self.tree)

...

    def OnItemExpanded(self, event):
        item = event.GetItem()
        if item:
            self.log.WriteText("OnItemExpanded: %s\n" % self.tree.GetItemText(item))

    def OnItemCollapsed(self, event):
        item = event.GetItem()
        if item:
            self.log.WriteText("OnItemCollapsed: %s\n" % self.tree.GetItemText(item))

    def OnSelChanged(self, event):
        self.item = event.GetItem()
        if self.item:
            self.log.WriteText("OnSelChanged: %s\n" % self.tree.GetItemText(self.item))
            if wx.Platform == '__WXMSW__':
                self.log.WriteText("BoundingRect: %s\n" %
                                   self.tree.GetBoundingRect(self.item, True))
            #items = self.tree.GetSelections()
            #print map(self.tree.GetItemText, items)
        event.Skip()
Daraufhin wurden die Bilder angezeugt. Jetzt meine Fragen: Was hat es mit self.log auf sich und was bewirkt WriteText in dem Zusammenhang? Und warum werden die Bilder nur mit diesen Events angezeigt?

Bin für jede Hilfe dankbar.

Gruß Cobra5

Verfasst: Sonntag 3. August 2008, 21:48
von HWK
Schau Dir mal main.py im wxPython-Demo-Ordner an. Hier wird Text in ein Log-Fenster geschrieben. Das ist also für die Funktion des Codes unerheblich.
MfG
HWK

Verfasst: Montag 4. August 2008, 19:47
von Cobra5
Danke für die Antwort. Es hat also nichts mit dem log-Fenster zu tun. Weiß jemand, warum die Bilder mit den oberen Code nicht dargestellt werden?

Gruß Cobra5

Verfasst: Montag 4. August 2008, 20:52
von HWK
Füge nach Zeile 12

Code: Alles auswählen

self.il = il
ein.
MfG
HWK

Verfasst: Dienstag 5. August 2008, 09:03
von Cobra5
Jetzt funktioniert es. Nochmal vielen Dank.

Gruß Cobra5