麻烦从tkinter中的列表框中选择项目

时间:2012-10-23 18:02:49

标签: python user-interface widget tkinter

我正在尝试从列表框中选择一个项目,当按下某个按钮时,该文件的索引位置将传递给另一个函数。

现在我只是想正确选择文件,但它不起作用。通过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)

1 个答案:

答案 0 :(得分:3)

我很快就看到的一个问题是:

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

应该是这样的:

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

在撰写时,您将self.moveFile的结果作为command传递(显然需要调用 self.movefile才能获得结果)

在那里滑动lambda会延迟调用该函数,直到实际点击该按钮为止。

那里的mainloop似乎有点可疑......