Verständnisproblem: TreeCtrl
Verfasst: Sonntag 3. August 2008, 19:26
Hallo allerseits,
Wie gesagt habe ich ein kleines Verständnisproblem. Hier erstmal mein Pythoncode:
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.
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
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()
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()
Bin für jede Hilfe dankbar.
Gruß Cobra5