我想通过使用tk filedialog打开来阅读所选文件的内容。当我选择文件并单击打开按钮时,文件不会打开,而是关闭对话框。如何用记事本打开所选文件,以便我能够读取文件中的内容。
from tkinter import *
from tkinter import filedialog
def my_file():
filename = filedialog.askopenfile(mode="r", initialdir="/", title="select file",
filetypes=(("text files", "*.txt"), ("all files", "*.*")))
root = Tk()
root.geometry("300x300")
#open the selected txt file with notepad to read the content
b = Button(root, text="open text file", command = my_file).pack()
root.mainloop()
修改 通过@PM 2RING和@Erik的提示,我将filedialog.askopen文件更改为filedialog.askopenfilename,当我选择文件时将其返回到用notepad.exe打开。 这是代码:
from tkinter import *
from tkinter import filedialog
import os
def my_file():
filename = filedialog.askopenfilename( initialdir="C:/", title="select
file", filetypes=(("text files", "*.txt"), ("all files", "*.*")))
for f in filename:
return f
os.system(r"C:/notepad.exe" + f)
root = Tk()
root.geometry("300x300")
#open the selected txt file with notepad to read
the content
b = Button(root, text="open text file", command = my_file).pack()
root.mainloop()
输出此错误:
Blockquote'C:/ notepad.exet'未被识别为内部或外部命令, 可操作程序或批处理文件。 块引用
但当我更改了返回打印时,它将目录打印到终端。我试图用子进程打开
subprocess.Popen([r'C:\Program Files (x86)\Notepad.exe' + f])
它也不会打开这个。
答案 0 :(得分:2)
这里有一些事情需要修改。
首先,C:/notepad.exe
不是记事本的位置(至少不在任何具有默认设置的Windows计算机上),您可以简单地使用notepad.exe
,这样可以使其与系统更兼容将记事本移到另一个位置(需要引用)。
其次,执行。 。 。
for f in filename:
return f
os.system(r"C:/notepad.exe" + f)
没有做你认为它做的事情。这里实际发生的是你的程序正在将字符串加载到循环中,评估第一个字符(可能" C")然后将字符串返回到Button
窗口小部件。 #39; t收到任何返回的值。这会破坏你的功能,所以它实际上永远不会达到os.system(r"C:/notepad.exe" + f)
的声明。
您还需要在用于打开记事本notepad.exe
的语句和实际文件声明f
之间包含空格,否则您将运行notepad.exeC:/text.txt
之类的内容向你抛出错误。
你应该做的事情如下:
from tkinter import *
from tkinter import filedialog
import os
def my_file():
filename = filedialog.askopenfilename( initialdir="C:/", title="select file", filetypes=(("text files", "*.txt"), ("all files", "*.*")))
os.system(r"notepad.exe " + filename)
root = Tk()
root.geometry("300x300")
b = Button(root, text="open text file", command = my_file).pack()
root.mainloop()
我想补充一点,我不知道你为什么要这样做,为什么不简单地在Text
小部件中显示文字?你在这里做的是为人们在记事本中添加一个额外的步骤,而不是打开文件浏览器,找到文件,然后打开它们,他们必须打开你的程序,然后打开文件浏览器,然后找到文件然后打开它。它至少添加了一次额外点击,更不用说程序的加载时间了。
答案 1 :(得分:1)
如PM 2Ring所述,我会使用os.system
函数。正如其描述中提到的那样,“os.system(command)”让你执行命令就好像你已经在命令提示符下写了一样,所以os.system("Notepad c:/users/yourName/junk.txt)
会打开一个名为junk.txt的文件,如果它在那个位置
换句话说,一旦您拥有filedialog.askopenfilename
电话的文件名,请执行以下操作:
import os
os.system("Notepad " + filename) # where filename is the string that filedialog.askopenfilename returns
在您的代码中实现应该不会太糟糕,但如果您需要更完整的示例,请告诉我们。
答案 2 :(得分:0)
以下代码将显示按钮和文本小部件。该按钮将加载到您的文件中,文本小部件将显示它。我认为这是你的想法?
from tkinter import *
from tkinter import filedialog
def my_file():
file = filedialog.askopenfile(mode="r", initialdir="/", title="select file",
filetypes=(("text files", "*.txt"), ("all files", "*.*")))
t.insert(END, file.read())
file.close()
root = Tk()
root.geometry("300x300")
#open the selected txt file with notepad to read the content
t = Text(root)
t.grid(row=0, column=0)
b = Button(root, text="open text file", command = my_file)
b.grid(row=1, column=0)
root.mainloop()