繁体   English   中英

从GtkTreeView获取完整的文件路径

[英]Get full file path from GtkTreeView

所以,我找到了一个使用Gtk.TreeView创建文件浏览器的教程,但我遇到了一个问题,当我在文件夹中选择一个文件时,我无法获得该文件的完整路径。 我可以获得模型路径,但我不知道如何处理它。

这是我的项目树:

.
├── 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

当我点击main.py ,路径是4 ,但如果我点击browser/markdown.min.js我得到0:1

在我的代码中,我检查路径的长度(我用':'分隔路径)是否大于1,如果不是我正常打开文件,如果是...这就是我被困住的地方。 有人可以帮忙吗?

这是我改变功能的TreeSelection:

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')

完整代码可在https://github.com/raggesilver/PyIDE/blob/master/main.py上找到

编辑1:更具体一点,我的问题是,当我从TreeView获取文件的名称时,我无法获得它之前的路径,所以我得到index.html而不是browser/index.html

我找到了解决问题的方法,逻辑是向后遍历路径(例如:4:3:5:0)并获取最后一个父名,然后前置到路径变量。 所以我们有:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM