2016-04-09 6 views
0

tkinterでこの問題が発生しました。 askopenfilenameで選択したファイルのパスと名前をリカバリし、後続のコードで使用するGUIを作成したいとします。私はオプションを試してみましたが、成功しませんでした。私が得た最高のものはフォローですが、私が必要とするものは返されません。助けてくれてありがとう。GUIでのaskopenfilenameの使用

import tkinter as tk 
from tkinter.filedialog import askopenfilename 
class TkFileDialogExample(tk.Frame): 

    def __init__(self, root): 
    tk.Frame.__init__(self, root) 
    self.a=[] 
    tk.Button(self, text='askopenfilename', command=self.askopenfilename).pack() 

    def askopenfilename(self): 
     filename= askopenfilename() 
     self.a.append(filename) 
     return self.a 

# MAIN PROGRAM 
aa=[] 
root = tk.Tk() 
TkFileDialogExample(root).pack() 
root.mainloop() 
aa.append(TkFileDialogExample.askopenfilename) 
print(aa) 
+0

期待される出力は?クラスを初期化し、 'root'にパッケージ化し、クラスのメソッドへの参照を' aa'リストに追加します。あなたはファイル名を尋ねるメソッドを初期化しておらず、ユーザがfildialogでキャンセルをクリックするとnoneを返すので、 'self.a'に' None'を追加したくない場合は'if filename:self.a.append(filename)'を確認します。 – Pythonista

+0

Hi Slayer。ありがとう、私はあなたが示唆したようにコードを実装しました。それでも私はメインコードでファイルの名前を取得することはできません。 GUIを閉じると、TkFileDialogExample.askopenfilename命令がファイルの名前を返すことを期待しています – VictorBrandl

答えて

0

は私が例では、ユーザーのFileDialogからファイル名を開けコメント(秒)あなたはGUIを終了すると

import tkinter as tk 
from tkinter.filedialog import askopenfilename 

filenames = [] 

def open_file(): 

    filename = askopenfilename() 
    if filename: 
     filenames.append(filename) 

root = tk.Tk() 
tk.Button(root, text='Open File', command=open_file).pack() 
root.mainloop() 
print(filenames) 

はあなたがすべての有効なのリストを持っているでしょうから、ここでは参考になると思いますキャンセルをクリックしなかった。

0

次のコードは、askopenfilenameダイアログをポップアップし、その結果をリストに追加するボタンを持つGUIを作成します。 このボタンは、GUIに、「askopenfilename」ダイアログが返すファイルパスを示すラベルも追加します。

import tkinter as tk 
from tkinter.filedialog import askopenfilename 

###Step 1: Create The App Frame 
class AppFrame(tk.Frame): 
    def __init__(self, parent, *args, **kwargs): 
     ###call the parent constructor 
     tk.Frame.__init__(self, parent, *args, **kwargs) 

     self.parent = parent 

     ###Create button 
     btn = tk.Button(self, text='askopenfilename',command=self.askopenfilename) 
     btn.pack(pady=5) 

    def askopenfilename(self): 
     ###ask filepath 
     filepath = askopenfilename() 

     ###if you selected a file path 
     if filepath: 
      ###add it to the filepath list 
      self.parent.filepaths.append(filepath) 

      ###put it on the screen 
      lbl = tk.Label(self, text=filepath) 
      lbl.pack() 

###Step 2: Creating The App 
class App(tk.Tk): 
    def __init__(self, *args, **kwargs): 
     ###call the parent constructor 
     tk.Tk.__init__(self, *args, **kwargs) 

     ###create filepath list 
     self.filepaths = [] 

     ###show app frame 
     self.appFrame = AppFrame(self) 
     self.appFrame.pack(side="top",fill="both",expand=True) 


###Step 3: Bootstrap the app 
def main(): 
    app = App() 
    app.mainloop() 

if __name__ == '__main__': 
    main() 
関連する問題