Paulo Queiroz
Paulo Queiroz

Reputation: 123

Get full file path from GtkTreeView

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.

Upvotes: 1

Views: 379

Answers (1)

Paulo Queiroz
Paulo Queiroz

Reputation: 123

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

Upvotes: 2

Related Questions