Python 如何使用Tkinter中的相同对话框浏览和选择文件和目录?
我正在使用Tkinter为python脚本构建GUI。我需要一个按钮,打开一个对话框,让我选择文件和目录。 到现在为止,我遇到过Python 如何使用Tkinter中的相同对话框浏览和选择文件和目录?,python,tkinter,Python,Tkinter,我正在使用Tkinter为python脚本构建GUI。我需要一个按钮,打开一个对话框,让我选择文件和目录。 到现在为止,我遇到过 tkFileDialog.askdirectory(parent=root, title=dirtext1) 只允许在对话框中选择目录 以及 这样我就可以选择文件了。到目前为止,我使用单独的按钮访问这些对话框,每个按钮调用其中一个函数。 是否可以使用单个对话框选择文件或文件夹?我不这么认为。没有内置类可以轻松完成这项工作 调查 如果查看tkFileDialog模块的
tkFileDialog.askdirectory(parent=root, title=dirtext1)
只允许在对话框中选择目录
以及
这样我就可以选择文件了。到目前为止,我使用单独的按钮访问这些对话框,每个按钮调用其中一个函数。
是否可以使用单个对话框选择文件或文件夹?我不这么认为。没有内置类可以轻松完成这项工作 调查 如果查看
tkFileDialog
模块的源代码,则打开的
类和目录
类都继承自\u对话框
,位于tkCommonDialog
中
到目前为止还不错;这些类很简单,只扩展了两个方法\u fixresult
是一个钩子,它根据您的选项进行过滤(有希望),并且\u fixoptions
添加正确的tcl参数(如初始目录)
但是当我们进入Dialog类(Dialog的父类)时,我们看到它以给定的名称调用tcl命令。内置的名称是“tk_getOpenFile”和“tk_chooseddirectory”。在此之后,我们没有太多python级别的命令自由度。如果我们去看别的什么
看来你的选择是正确的
ttk::getOpenFile
ttk::getSaveFile
ttk::选择目录
ttk::getAppendFile
directory = os.path.dirname(os.path.realpath(tkFileDialog.askopenfilename()))
他们必须选择一个文件,但“打开”按钮将“返回路径”,即路径是从文件位置计算出来的
但我真的想要它强>
如果出于某种原因,您确实想要这种行为,但不想重新制作小部件,那么可以直接调用tcl脚本。可以从getOpenFile复制代码,并提供更松散的参数,以便选择更通用的对象。这不是我的专长,似乎是一个非常糟糕的主意,但这是您直接调用tcl的方式,您可以在这里了解有关底层命令的更多信息。我不这么认为。没有内置类可以轻松完成这项工作 调查 如果查看
tkFileDialog
模块的源代码,则打开的
类和目录
类都继承自\u对话框
,位于tkCommonDialog
中
到目前为止还不错;这些类很简单,只扩展了两个方法\u fixresult
是一个钩子,它根据您的选项进行过滤(有希望),并且\u fixoptions
添加正确的tcl参数(如初始目录)
但是当我们进入Dialog类(Dialog的父类)时,我们看到它以给定的名称调用tcl命令。内置的名称是“tk_getOpenFile”和“tk_chooseddirectory”。在此之后,我们没有太多python级别的命令自由度。如果我们去看别的什么
看来你的选择是正确的
ttk::getOpenFile
ttk::getSaveFile
ttk::选择目录
ttk::getAppendFile
directory = os.path.dirname(os.path.realpath(tkFileDialog.askopenfilename()))
他们必须选择一个文件,但“打开”按钮将“返回路径”,即路径是从文件位置计算出来的
但我真的想要它强>
如果出于某种原因,您确实想要这种行为,但不想重新制作小部件,那么可以直接调用tcl脚本。可以从getOpenFile复制代码,并提供更松散的参数,以便选择更通用的对象。这不是我的专长,似乎是一个非常糟糕的主意,但这是您直接调用tcl的方式,也是您可以了解有关底层命令的更多信息的地方。我也遇到过类似的问题。
最后,我使用askopenfilenames()(复数)并从文件中分割路径。然后使用单选按钮,要求用户选择是要处理目录中的所有文件,还是只处理他们选择的文件
filetypes = [('All files', '*.*'), ('CSV files', '*.csv'),]
data_list = askopenfilenames(title='Select folder', filetypes=filetypes)
data_dir = data_list[0].rsplit('/', 1)[0]
我之所以提到它,是因为askopenfilenames()没有得到太多建议,但更接近于选择一个文件夹,就像ctrl+a all files一样。我也遇到过类似的问题。
最后,我使用askopenfilenames()(复数)并从文件中分割路径。然后使用单选按钮,要求用户选择是要处理目录中的所有文件,还是只处理他们选择的文件
filetypes = [('All files', '*.*'), ('CSV files', '*.csv'),]
data_list = askopenfilenames(title='Select folder', filetypes=filetypes)
data_dir = data_list[0].rsplit('/', 1)[0]
我之所以提到它,是因为askopenfilenames()没有得到太多建议,但更接近于选择一个文件夹,ctrl+a也可以选择所有文件。当按下按钮时,是否要依次调用
askdirectory()
和askopenfilename()
,我想有一个共同的对话框来选择文件或文件夹。(编辑问题以澄清这一点)虽然它们在tkinter中没有真正做到这一点的内置方式,但您可以要求用户使用tkinter.askopenfilename()
选择一个文件,然后在所选文件上使用os.path.dirname()
,以获取选择文件的目录,有效地从同一个对话框返回文件和目录。那就太好了