2017-06-16 11 views
1

以下の例では、ボタンは特定のディレクトリのファイルに従って作成されています。そしてボタンにプリント機能を追加しました。私がしたかったのは、各ボタンをクリックすると、すべてのボタンが関連するファイルを印刷するはずです。しかし、以下のコードに従って、すべてのボタンをクリックすると、ファイルリストの最後の項目である同じファイル名が印刷されます。これらのコードで何が欠けているか私に教えてもらえますか?ボタンをクリックしたときにファイル名をコンソールに表示する方法は?

from tkinter import * 
import os 


class Application: 
    def __init__(self): 
     self.window = Tk() 

     self.frame = Frame() 
     self.frame.grid(row=0, column=0) 

     self.widgets() 
     self.mainloop = self.window.mainloop() 

    def widgets(self): 
     files = self.path_operations() 
     for i in range(len(files)): 
      button = Button(self.frame, text="button{}".format(i)) 
      button.grid(row=0, column=i) 
      button.configure(command=lambda: print(files[i])) 

    @staticmethod 
    def path_operations(): 
     path = "D:\TCK\\Notlar\İş Başvurusu Belgeleri" 
     file_list = [i for i in os.listdir(path) if os.path.isfile(os.path.join(path, i))] 
     return file_list 


a = Application() 
+0

ありがとう、私はそのページを見ていきます。 –

答えて

1

プログラムがどのファイルに印刷するのではなく、iが共有され、変更内容を知って何とか必要があります。技術は次のとおりです。

def widgets(self): 
    files = self.path_operations() 
    for i in range(len(files)): 
     button = Button(self.frame, text="button{}".format(i)) 
     button.grid(row=0, column=i) 
     button.configure(command=self.make_print(files[i])) 

@staticmethod 
def make_print(file): 
    def local_print(): 
     print(file) 
    return local_print 
+0

この技術は私の問題を解決しました。どうもありがとうございました。 –

関連する問題