14

ユーザーがテキストファイルを開くことを許可しようとしている次のコードがあり、ユーザーがそれを選択したら、コードにそれを読み取らせたいと思います(これはコードの完成したブロックではなく、何を示すかだけです)私は後です)。

ただし、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 の使い方がわかりません。また、開いているファイルを読み取ることもできません。

4

3 に答える 3

9

サンプル コードの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 固有のものは何もないことに注意してください。ダイアログ ボックスにはファイル名が表示されるだけです。

于 2012-06-12T08:55:31.683 に答える
9

askopenfilenameファイル名のみを返します。必要なのは、パラメーターaskopenfileを受け入れてファイルを開くものでした。mode

于 2012-06-12T08:57:13.700 に答える
0

エラーは関数の名前です。私は単に変更def open()しましたがdef open1()、うまくいきます。

def open1():

    filename = askopenfilename(parent=fen1)
    print(filename)
    f = open(filename)
    txt = f.read()
    print txt
    f.close()
于 2016-06-07T08:56:23.310 に答える