Verständnisproblem: TreeCtrl

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Cobra5
User
Beiträge: 22
Registriert: Sonntag 25. Mai 2008, 10:44

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

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
Cobra5
User
Beiträge: 22
Registriert: Sonntag 25. Mai 2008, 10:44

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Füge nach Zeile 12

Code: Alles auswählen

self.il = il
ein.
MfG
HWK
Cobra5
User
Beiträge: 22
Registriert: Sonntag 25. Mai 2008, 10:44

Jetzt funktioniert es. Nochmal vielen Dank.

Gruß Cobra5
Antworten