![](/img/trans.png)
[英]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.