从用户那里获取许多输入以接收输入作为字符串,如文件名,目录,其他输入

时间:2012-11-20 10:12:16

标签: python tkinter

我正在和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,我还没有尝试过......

或者还有其他方式,只是从按钮中读取它吗?

1 个答案:

答案 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