2012-06-12 8 views
8

私は、ユーザーがテキストファイルを開くことを許可しようとしている次のコードを持っています。ユーザーがそれを選択すると、コードを読みたいと思います。コードの完成したブロック、ちょうど私が何をしているかを示す)。askopenfilenameでファイルを開いて読む

しかし、私はtkFileDialog.askopenfilenameを使用して 'mode =' rb ''を追加するか、以下のようなコードを使用してエラーが発生する場所でreadを使用することができません。

メニューやリストボックスなどの各項目にTkinter.'module 'と入力する必要がないので、どのようにすればいいのか分かりません。 Beginner to 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の使用方法を理解し、また、私は開いていたファイルを読み取ることができません。

+0

あなたは簡単に問題を開始することを望むかもしれない:あなたは、特定のファイルを開き、印刷したPythonプログラムを書くことができ、 'の/ etc/passwd'または他のいくつかの簡単な言う、知らツー存在するが、ファイル? – sarnold

+0

私はこれまでテキストファイルの読み書きに取り組んできましたが、Tkinterは一度も使用していませんし、ファイルを開いた後にちょっと混乱してしまいました。ファイル名を削除する必要がありますか? – user2063

答えて

6

askopenfilenameはファイル名のみを返します。askopenfilemodeパラメータを受け取り、ファイルを開きます。

+0

このような簡単な答えが働いた、ありがとう! – user2063

7

サンプルコードの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に固有のものは何も読書にありませんことをファイル - ダイアログボックスにファイル名が表示されます。

+0

は、私が 'askopenfilename'や他のコマンドを使ってリモートマシンのファイルを閲覧することができる可能性があります – Fahadkalis

0

あなたのエラーはあなたの関数の名前です。 def open()def open1()に変更しただけで動作します。

def open1(): 

    filename = askopenfilename(parent=fen1) 
    print(filename) 
    f = open(filename) 
    txt = f.read() 
    print txt 
    f.close() 
+0

"open"は元の質問のopen関数によって呼び出されません。あなたの例では、再帰関数を定義したようですが、関数はどこから来ましたか? – RufusVS