0
#!/usr    /bin/python
# -*- coding: utf-8 -*-
import wx
import os    

class RandomObj(object):

    def __init__(self, name):
        self.name = name
class TreeExample(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='Database', size=(200, 130))
        self.tree = wx.TreeCtrl(self, size=(200, 100))
        root = self.tree.AddRoot('Database')
        self.tree.AppendItem(root, 'Class A')
        files = []
        for (dirname, dirnames, filenames) in \
            os.walk('D:/Database/Class A'):

            # print path to all subdirectories first.

            for subdirname in dirnames:
                files.append(os.path.join(dirname, subdirname))
                # print path to all filenames.
                for filename in filenames:
                    self.item = files.append(os.path.join(dirname,
                            filename))
                    self.tree.AppendItem(self.tree.GetLastChild(root),
                            filename)
        self.sel = []
        for (i, j) in enumerate(files):
            if j.endswith('.txt'):
                self.sel.append(j)
        print self.sel
        self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivated,
                  self.tree)
    def OnActivated(self, event):
        value = event.GetItem()
        f = open(value, 'r')
        lines = f.readlines()
        print lines[0]
        print lines[1]
        print 'Double clicked on', self.tree.GetItemText(value)

the 'value' I'm trying to pass to open() is treeitemid, it requires filepath

Dirk Horsten
  • 3,753
  • 4
  • 20
  • 37

1 Answers1

0

I think that you'll have to walk back up the tree.
This seems to work, although you may want to wait for a better answer

#!/usr/bin/python
# -*- coding: utf-8 -*-
import wx
import os

class RandomObj(object):

    def __init__(self, name):
        self.name = name

class TreeExample(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='Database', size=(200, 130))
        self.tree = wx.TreeCtrl(self, size=(200, 100))
        root = self.tree.AddRoot('/home/public')
        self.root = '/home/public'
        self.tree.AppendItem(root, 'Music')
        files = []
        for (dirname, dirnames, filenames) in \
            os.walk('/home/public/Music'):

            # print path to all subdirectories first.

            for subdirname in dirnames:
                files.append(os.path.join(dirname, subdirname))
                # print path to all filenames.
                for filename in filenames:
                    self.item = files.append(os.path.join(dirname,
                            filename))
                    self.tree.AppendItem(self.tree.GetLastChild(root),
                            filename)
        self.sel = []
        for (i, j) in enumerate(files):
            if j.endswith('.txt'):
                self.sel.append(j)
        #print self.sel
        self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivated,
                  self.tree)

    def OnActivated(self, event):
        value = self.tree.GetSelection()
        fname = []
        while self.tree.GetItemParent(value):
            fname.insert(0,"/"+self.tree.GetItemText(value))
            value = self.tree.GetItemParent(value)
        fname.insert(0,self.root)
        the_file = "".join(fname)
        f = open(the_file, 'r')
        lines = f.readlines()
        print (lines[0])
        print (lines[1])
        print ('Double clicked on', str(the_file))
if __name__ == '__main__':
    app = wx.App()
    frame = TreeExample()
    frame.Show()
    app.MainLoop()
Rolf of Saxony
  • 21,661
  • 5
  • 39
  • 60
  • This works very well for me...declared a global variable and assigned files [] to it, then variable passed to function directly. thank you... @Rolf of Saxony – Dhananjay Nalawade Dec 22 '17 at 04:50