1

So, I found a tutorial on creating a file browser using Gtk.TreeView but I'm facing a problem, when I select a file inside a folder I cant get the file's full path. I can get the model path but I don't know what to do with it.

This is my project tree:

. ├── browser │ ├── index.html │ └── markdown.min.js ├── compiler.py ├── ide-preview.png ├── __init__.py ├── main.py ├── __pycache__ │ ├── compiler.cpython-35.pyc │ └── welcomeWindow.cpython-35.pyc ├── pyide-settings.json ├── README.md ├── resources │ └── icons │ ├── git-branch.svg │ ├── git-branch-uptodate.svg │ └── git-branch-waitforcommit.svg ├── test.py ├── WelcomeWindow.glade └── welcomeWindow.py 

When I click on main.py the path is 4, but if I click on browser/markdown.min.js I get 0:1.

In my code I check if the path's length (I split the path by ':') is bigger than 1, if not I open the file normally, if it is... This is where I'm stuck. Anyone can help?

Here is my TreeSelection on changed function:

def onRowActivated(self, selection): # print(path.to_string()) # Might do the job... model, row = selection.get_selected() if row is not None: # print(model[row][0]) path = model.get_path(row).to_string() pathArr = path.split(':') fileFullPath = '' if not os.path.isdir(os.path.realpath(model[row][0])): # self.openFile(os.path.realpath(model[row][0])) if len(pathArr) <= 1: self.openFile(os.path.realpath(model[row][0])) else: # Don't know what to do! self.languageLbl.set_text('Language: {}'.format(self.sbuff.get_language().get_name())) else: print('None') 

Full code is available at https://github.com/raggesilver/PyIDE/blob/master/main.py

Edit 1: Just to be more specific, my problem is that when I get the name of the file from the TreeView, I can't get the path before it, so I get index.html instead of browser/index.html.

2
  • What happens when you use self.openFile(os.path.realpath(model[row][0])) ? Commented Apr 7, 2017 at 22:54
  • I don't think it is relevant but anyways... I use open(path, 'r') to read the given file, you can check all the functions on Github if you want to Commented Apr 8, 2017 at 15:10

1 Answer 1

2

I found a solution to my problem, the logic was to iterate through the path (e.g.: 4:3:5:0) backwards and get the last parent's name and then prepend to the path variable. So we have:

def onRowActivated(self, selection): model, row = selection.get_selected() if row is not None: fullPath = '' cur = row while cur is not None: fullPath = os.path.join(model[cur][0], fullPath) cur = model.iter_parent(cur) # do whatever with fullPath 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.