python - 从 tkinter Text 小部件中作为文本存在的文件名(仅基名)获取文件详细信息(完整文件路径)
问题描述
在以下代码的帮助下,我在 tkinter Text 小部件中插入文件名(文件基名),然后在按下“获取数据”按钮后尝试打印完整的文件路径。
import tkinter as tk
from tkinter.filedialog import askopenfilename
import os
root=tk.Tk()
ent=tk.Text(root)
ent.grid(row=1,column=0)
def addfile():
filename =askopenfilename(filetypes=(("Tiff files","*.tif"),("All files","*.*")))
ent.insert(tk.INSERT, '"' + os.path.basename(filename) + '"')
ent.insert(tk.INSERT, "\n")
def getfile():
print(ent.get("1.0", tk.END))
b=tk.Button(root,text="Select File",command=addfile)
b.grid(row=0,column=0)
b1 = tk.Button(root,text="Get Data",command=getfile)
b1.grid(row=2,column=0)
root.mainloop()
运行上述代码后,仅打印文件名(没有文件路径)。
现在基本上我想要的是,在按下“获取数据”按钮(读取文本小部件的内容)之后,应该打印文件的完整路径。
附加信息:-
我知道如果文件名不同,那么我可以使用字典(键,值)对来链接每个文件的基本名称及其绝对路径。但是,当不同的文件存在于不同的文件夹位置但具有相同的名称被添加到文本小部件时,就会出现问题。
解决方案
正如 Cool Cloud 所评论的那样,很难给出您需要的确切答案,因为您还没有告诉我们正在发生什么以及您期望/会发生什么。
我读它的方式是你要么想要:
askopenfilename()
您从要插入到小部件中的收到的整个文件名Text
。- 您希望在单击 时打印整个文件名
Button
b1
,但Text
小部件保持原样。
1.我会def addfile():
改成
def addfile():
filename = askopenfilename()
ent.insert(tk.INSERT, '"' + filename + '"\n')
这样做是插入完整的文件路径而不仅仅是基本名称,即它会插入"D:/example/help.tif"
而不只是help.tif
.
2.我会使用下面的代码
root = tk.Tk()
def addfile():
filename = askopenfilename()
list_of_filenames.append(filename)
ent.insert(tk.INSERT, '"' + os.path.basename(filename) + '"\n')
def getfile():
for i in range(len(list_of_filenames)):
print(list_of_filesnames[i])
list_of_filenames = []
ent = tk.Text(root)
ent.grid(row=1, column=0)
b=tk.Button(root,text="Select File",command=addfile)
b.grid(row=0,column=0)
b1 = tk.Button(root,text="Get Data",command=getfile)
b1.grid(row=2,column=0)
root.mainloop()
我所做的是创建一个名为的全局列表变量list_of_filenames
,并在def addfile():
其中添加了行list_of_filenames.append(filename)
,这将获取您选择的文件和路径,并将其添加到列表变量中。因此,为您提供了一个包含您选择的每个文件的列表,并且可以通过您构建的任何函数访问它,因为它是全局的。
最后的更改是def getfile():
可以完全按照您的意愿完成,我已经编写它以在单独的行上单独打印每个文件,没有方括号或引号。
使用与第 1 部分相同的示例,如果我选择了一个带有路径D:/example/help.tif
的文件,Text
小部件将读取“help.tif”,并且b1
单击时D:/example/help.tif
将打印到控制台。
推荐阅读
- html - 内联 CSS 图像过渡
- jquery - 如何访问特定键的本地存储值
- amazon-web-services - 旋转后 Tomcat 的日志为空 - AWS EC2 - Tomcat 8
- amazon-s3 - 如何授予 lambda 权限以将文件上传到 `terraform` 中的 s3 存储桶?
- jquery - 如何在文件转换时使用 ajax 制作加载器
- android - 根据放置在相机上的视图裁剪图像的特定部分
- regex - 正则表达式函数说明
- android - 我们如何在 onTouch 事件中将带有 drawRect() 的框限制为 Square
- android - 有没有办法在没有预定义属性的情况下手动创建应用程序主题?
- updates - toc.update 是否还包括 toc.updatepagenumbers?