Python 如何使用idlelib.TreeWidget打开文件?
我正在用Python3.5制作一个文件浏览器,其中包括重命名和查看,但不确定如何使其在单击文件时打开。我知道如何使用os.startfile(“文件”),但我不确定在哪里包括它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()
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
获取文件的完整路径。