[英]Python-Tkinter-askopenfilename: Use filepath of the opened file for reading values
[英]Opening and reading a file with askopenfilename
我有以下代码试图允许用户打开文本文件,一旦用户选择了它,我希望代码读取它(这不是完整的代码块,只是为了显示什么内容)我在追)。
但是,我在使用tkFileDialog.askopenfilename并添加'mode ='rb'或使用下面的代码以及在产生错误的地方使用read时遇到困难。
有谁知道我该怎么做,因为我不想为菜单和列表框等每个项目都键入Tkinter.'module'。 初学者对Tkinter有点困惑! 谢谢您的帮助!
import sys
from Tkinter import *
import tkFileDialog
from tkFileDialog import askopenfilename # Open dialog box
fen1 = Tk() # Create window
fen1.title("Optimisation") #
menu1 = Menu(fen1)
def open():
filename = askopenfilename(filetypes=[("Text files","*.txt")])
txt = filename.read()
print txt
filename.close()
fen1.mainloop()
显然我到达这里的错误是:
AttributeError: 'unicode' object has no attribute 'read'
我不知道如何使用askopen,也无法读取我正在打开的文件。
askopenfilename
仅返回文件名,您想要的是askopenfile
,它接受mode
参数并为您打开文件。
示例代码中的filename
就是这样-一个字符串,指示您要打开的文件的名称。 您需要将其传递给open()
方法以返回名称的文件句柄。 然后,您可以从文件句柄读取。
这是一些可以直接在Python解释器中运行的快速而肮脏的代码。 (您也可以在脚本中运行它,但是我真的很喜欢REPL接口来快速尝试。您也可能喜欢它。)
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import Tkinter
>>> from tkFileDialog import askopenfilename
>>> root = Tkinter.Tk() ; root.withdraw()
''
>>> filename = askopenfilename(parent=root)
>>> filename
'/tmp/null.c'
>>> f=open(filename)
>>> f.read()
'#include<stdio.h>\n\nint main()\n{\n for(;NULL;)\n printf("STACK");\n\n return 0;\n}\n\n'
>>> f.close()
>>>
特别要注意的是,在读取文件时没有Tkinter特有的东西-该对话框仅提供文件名。
您的错误是函数的名称。 我只是简单地将def open()
更改为def open1()
。
def open1():
filename = askopenfilename(parent=fen1)
print(filename)
f = open(filename)
txt = f.read()
print txt
f.close()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.