我有以下代码,我试图允许用户打开一个文本文件,一旦用户选择它,我希望代码读取它(这不是一个完成的代码块,只是为了显示什么我以后).
但是,我在使用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()
Run Code Online (Sandbox Code Playgroud)
显然,我在这里得到的错误是:
AttributeError: 'unicode' object has no attribute 'read'
Run Code Online (Sandbox Code Playgroud)
我不明白如何使用askopen,也能够读取我正在打开的文件.
在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()
>>>
Run Code Online (Sandbox Code Playgroud)
特别要注意的是,在读取文件时没有特定于Tkinter的东西 - 对话框只是给你一个文件名.
| 归档时间: |
|
| 查看次数: |
55107 次 |
| 最近记录: |