我正在和Tkinter一起玩,但是当我只问一个接一个的输入时它就可以工作了。比如'askopenfilename'。但是获得许多弹出窗口并不那么舒服。 我想只构建一个Frame来同时获取所有输入。
到目前为止,我发现只是带有按钮的框架(来自一些教程)来询问FileName或Directory,但我无法读取用户的选择。
import Tkinter, Tkconstants, tkFileDialog
class TkFileDialogExample(Tkinter.Frame):
def __init__(self, root):
Tkinter.Frame.__init__(self, root)
# define buttons
Tkinter.Button(self, text='askopenfilename', command=self.askopenfilename).pack()
Tkinter.Button(self, text='askdirectory', command=self.askdirectory).pack()
def askopenfilename(self):
return tkFileDialog.askopenfilename()
def askdirectory(self):
return tkFileDialog.askdirectory()
if __name__=='__main__':
root = Tkinter.Tk()
TkFileDialogExample(root).pack()
root.mainloop()
这只是建立了我没问题的框架,但它不停地循环,我无法得到用户选择的内容。 我想也许我只是可以获得一个按钮功能(因为它是返回)附带的值?
我是否必须创建一个空列表,数组,dic来存储像这里建议的函数值:Returning a value after calling a function with a button in Tkinter,我还没有尝试过......
或者还有其他方式,只是从按钮中读取它吗?
答案 0 :(得分:2)
首先,您可以允许用户使用multiple
的{{1}}标记在一个对话框中选择多个文件。
其次,tkFileDialog
返回文件名(或带有多个文件名的字符串),如果需要,可以使用它来执行操作。例如:
tkFileDialog
如果要在其他方法中使用所选文件,请将文件名保存到实例变量,或直接传递。使用return在这里没什么用,因为它是由按钮调用的,它不知道如何处理这样的返回值。
在下面的方法中,def askopenfilename(self):
files = tkFileDialog.askopenfilename(multiple=True)
# files might be "file1.txt file2.exe file3.bmp" at this point
if files: # make sure user didn't cancel the dialog, selecting nothing
for f in files.split(' '):
print f
可以使用processFiles
执行您要对文件执行的任何操作。
self.files
有关更多示例,请参阅here。