0

リストボックスから項目を選択しようとしていますが、ボタンを押すと、そのファイルのインデックス位置が別の関数に渡されます。

現在、ファイルを適切に選択しようとしていますが、機能していません。ディレクトリはopenfile(はい、名前の誤りなど)を介して選択され、directoryContentsに渡されます。ここから、コマンドプロンプトに「()」が出力されます。これは、ボタンが実行された直後ではなく、ボタンが押されたときにのみ発生するはずなので、それは私の問題の一部です。リスト内の項目を選択してボタンを押しても、何も起こりません。

リストの最初の項目を選択してボタンを押すと、コマンドプロンプトに(0)が出力されます。

class Actions:

    def openfile(self):
        directory = tkFileDialog.askdirectory(initialdir='.')
        self.directoryContents(directory)


    def filename(self):
        Label (text='Please select a directory').pack(side=TOP,padx=10,pady=10)

    def directoryContents(self, directory):
        scrollbar = Scrollbar() #left scrollbar - display contents in directory
        scrollbar.pack(side = LEFT, fill = Y) 

        scrollbarSorted = Scrollbar() #right scrollbar - display sorted files 
        scrollbarSorted.pack(side = RIGHT, fill = Y, padx = 2)

        fileList = Listbox(yscrollcommand = scrollbar.set) #files displayed in the first scrollbar
        for filename in os.listdir(directory):
            fileList.insert(END, filename)
        fileList.pack(side =LEFT, fill = BOTH)
        scrollbar.config(command = fileList.yview)

        fileList2 = Listbox(yscrollcommand = scrollbarSorted.set) #second scrollbar (button will send selected files to this window)
        fileList2.pack(side =RIGHT, fill = BOTH)
        scrollbarSorted.config(command = fileList2.yview)

        selection = fileList.curselection() #select the file
        b = Button(text="->", command=self.moveFile(selection)) #send the file to moveFile
        b.pack(pady=5, padx =20)

        mainloop()

    def moveFile(self,File):
        print(File)

#b = Button(text="->", command=Actions.moveFile(Actions.selection))
#b.pack(pady=5, padx =20)
4

1 に答える 1

3

私がすぐに目にする問題の1つは、次のとおりです。

b = Button(text="->", command=self.moveFile(selection))

次のようになります。

b = Button(text="->", command=lambda:self.moveFile(fileList.curselection()))

self.moveFile書かれているように、 asの結果を渡します(結果を取得するにはcommand明らかに呼び出す必要があります) self.movefile

そこにスリップするlambdaと、ボタンが実際にクリックされるまで関数の呼び出しが延期されます。

そこmainloopにも少し怪しいようです...

于 2012-10-23T18:08:22.447 に答える