Python 如何使用idlelib.TreeWidget打开文件?

Python 如何使用idlelib.TreeWidget打开文件?,python,python-3.x,tkinter,libraries,Python,Python 3.x,Tkinter,Libraries,我正在用Python3.5制作一个文件浏览器,其中包括重命名和查看,但不确定如何使其在单击文件时打开。我知道如何使用os.startfile(“文件”),但我不确定在哪里包括它 try: from Tkinter import * except ImportError: from tkinter import * from idlelib.TreeWidget import ScrolledCanvas, FileTreeItem, TreeNode root = Tk()

我正在用Python3.5制作一个文件浏览器,其中包括重命名和查看,但不确定如何使其在单击文件时打开。我知道如何使用os.startfile(“文件”),但我不确定在哪里包括它

try:
    from Tkinter import *
except ImportError:
    from tkinter import *

from idlelib.TreeWidget import ScrolledCanvas, FileTreeItem, TreeNode

root = Tk()
root.title("Browser")
sc = ScrolledCanvas(root, bg="white", highlightthickness=0, takefocus=1)
sc.frame.pack(expand=1, fill="both", side="left")
loc = input("Please enter your directory: ")
item = FileTreeItem(loc)
node = TreeNode(sc.canvas, None, item)
node.expand()
root.mainloop()

通过子类化
idlelib.TreeNode
并重写继承的
select()
方法,可以获取与
TreeNode
关联的文件名

这里有一个例子来说明我的意思:

try:
    from Tkinter import *
except ImportError:
    from tkinter import *

from idlelib.TreeWidget import ScrolledCanvas, FileTreeItem, TreeNode

class MyTreeNode(TreeNode):
    def select(self, event=None):
        TreeNode.select(self, event)  # can't use super() here in Python 2
        print('select called')
        print('self.item.GetText(): {!r}'.format(self.item.GetText()))
        print('self.item.path: "{}"'.format(self.item.path))  # call os.startfile() here

root = Tk()
root.title("Browser")

sc = ScrolledCanvas(root, bg="white", highlightthickness=0, takefocus=1)
sc.frame.pack(expand=1, fill="both", side="left")

loc = input("Please enter your directory: ")
item = FileTreeItem(loc)

node = MyTreeNode(sc.canvas, None, item)
node.expand()

root.mainloop()

通过子类化
idlelib.TreeNode
并重写继承的
select()
方法,可以获取与
TreeNode
关联的文件名

这里有一个例子来说明我的意思:

try:
    from Tkinter import *
except ImportError:
    from tkinter import *

from idlelib.TreeWidget import ScrolledCanvas, FileTreeItem, TreeNode

class MyTreeNode(TreeNode):
    def select(self, event=None):
        TreeNode.select(self, event)  # can't use super() here in Python 2
        print('select called')
        print('self.item.GetText(): {!r}'.format(self.item.GetText()))
        print('self.item.path: "{}"'.format(self.item.path))  # call os.startfile() here

root = Tk()
root.title("Browser")

sc = ScrolledCanvas(root, bg="white", highlightthickness=0, takefocus=1)
sc.frame.pack(expand=1, fill="both", side="left")

loc = input("Please enter your directory: ")
item = FileTreeItem(loc)

node = MyTreeNode(sc.canvas, None, item)
node.expand()

root.mainloop()

你知道如何获取整个目录名而不是文件名,例如“C:/windows/system32/calc.exe”而不是“calc.exe”吗?卢克:如果我的答案解决了你原来的问题(或向你展示了如何解决),请接受。参见Luke:关于你的后续问题,不知道完整路径是原因之一,我只是打印了与
TreeNode
相关的文本,而不是调用
os.startfile()
。我会研究可能的解决方案,如果我找到了,会告诉你。我已经尝试将名称与用户输入的输入一起添加
(loc+self.item.get())
,但它不适用于子文件夹,当你尝试从它们获取文件时。卢克:看起来是这样,而不是使用
self.item.GetText()
要获取文件名,您可以使用
self.item.path
获取文件的完整路径。您知道如何获取整个目录名,而不仅仅是文件名,例如“C:/windows/system32/calc.exe”,而不仅仅是“calc.exe”?卢克:如果我的答案解决了您最初的问题(或向您展示了如何做到这一点),请接受。参见Luke:关于你的后续问题,不知道完整路径是原因之一,我只是打印了与
TreeNode
相关的文本,而不是调用
os.startfile()
。我会研究可能的解决方案,如果我找到了,会告诉你。我已经尝试将名称与用户输入的输入一起添加
(loc+self.item.get())
,但它不适用于子文件夹,当你尝试从它们获取文件时。卢克:看起来是这样,而不是使用
self.item.GetText()
要获取文件名,可以使用
self.item.path
获取文件的完整路径。