2016-07-21 6 views
0

ユーザーがファイルの場所に入力できるエントリウィジェットがあり、その下に「保存」ボタンと「読み込み」ボタンがあります。どのボタンがクリックされたかに応じて、エントリーウィジェットで指定されたファイルは、書き込みまたは読み取りのために開かれます。保存ダイアログとロードダイアログを組み合わせたTkinterファイルダイアログ

これはすべて正常に動作します。

ここで、ユーザーがクリックしてファイルダイアログを開いてファイルを選択できる「ブラウズ」ボタンを追加します。ファイルが選択されると、ファイル名がエントリにコピーされます。そこから、保存ボタンとロードボタンが正常に動作するはずです。

しかし、ファイルの読み込みと書き込みの両方のためにファイルダイアログを取得する方法を理解できません。 tkFileDialog.asksaveasfilenameを使用することはできません。これは、ファイルが既に存在する場合(ユーザが「読み込み」を意図している場合)、ユーザに文句を言う可能性があります。また、tkFileDialog.askloadasfilename関数では、まだ存在していない(ユーザが "保存する"ことを意図しているなら、それはうまくいくはずである)。

これらの機能を表示しないダイアログを作成することはできますか?

+0

ファイル名ではなくディレクトリを指定してください! http://stackoverflow.com/questions/11295917/how-to-select-a-directory-and-store-the-location-using-tkinter-in-python – dsgdfg

+0

ディレクトリを要求するとファイルを選択できませんすべて。 ( "フォルダC:\ test.txtは使用できません。別のフォルダを選択してください。") – acdr

+0

保存するかどうかを確認するには、ファイル名を読んでください。 「SAVE」、「LOAD」の2つのボタンでトップレベルウィンドウを作成します。それは単純ではありません:ファイルがロックされている(平均オープン)場合、存在する場合、上書きなど... – dsgdfg

答えて

0

は、あなたが探しているものは以下です:

from tkinter import * 
from tkinter.filedialog import * 
root = Tk() 
root.title("Save and Load") 
root.geometry("600x500-400+50") 

def importFiles(): 
    try: 
     filenames = askopenfilenames() 
     global file 
     for file in filenames: 
      fileList.insert(END, file) 
    except: 
     pass 

def removeFiles(): 
    try: 
     fileList.delete(fileList.curselection()) 
    except: 
     pass 

def openFile(): 
    try: 
     text.delete(END) 
     fob = open(file, 'r') 
     text.insert(0.0, fob.read()) 
    except: 
     pass 

def saveFile(): 
    try: 
     fob = open(file, 'w') 
     fob.write(text.get(0.0, 'end-1c')) 
     fob.close() 
    except: 
     pass 

listFrame = Frame(root) 
listFrame.pack() 

sby = Scrollbar(listFrame, orient='vertical') 
sby.pack(side=RIGHT, fill=Y) 

fileList = Listbox(listFrame, width=100, height=5, yscrollcommand=sby.set) 
fileList.pack() 

sby.config(command=fileList.yview) 

buttonFrame = Frame(root) 
buttonFrame.pack() 

importButton = Button(buttonFrame, text="Import", command=importFiles) 
importButton.pack(side=LEFT) 

removeButton = Button(buttonFrame, text="Remove", command=removeFiles) 
removeButton.pack(side=LEFT) 

openButton = Button(buttonFrame, text="Open", command=openFile) 
openButton.pack(side=LEFT) 

saveButton = Button(buttonFrame, text="Save", command=saveFile) 
saveButton.pack(side=LEFT) 

text = Text(root) 
text.pack() 

root.mainloop() 

「私はセーブとロードの両方に使用することができ、ファイル名を返す1つのダイアログをしたいです。」
ダイアログウィンドウを使用してファイル名をインポートできます。選択したファイル名をリストから削除します(追加機能)。選択したファイルを開きます。最後に、それらを書き出して保存します。
P .:私のコードにはいくつかのバグがあるかもしれませんが、アルゴリズムが質問しています。

関連する問題