[英]How can I have a tkinter popup message with yes or no button and has a dialog box on the same popup message?
[英]How can I use the same dialog box in Tkinter to browse and select files and directories?
我正在使用 Tkinter 为 python 脚本构建 GUI。 我需要一个按钮来打开一个对话框,允许我选择文件和目录。 直到现在,我遇到了
tkFileDialog.askdirectory(parent=root, title=dirtext1)
它只允许在对话框中选择目录,
tkFileDialog.askopenfilename(parent=root, title=filetext)
这允许我只选择文件。 到目前为止,我使用单独的按钮访问这些对话框,每个按钮调用这些功能之一。 无论如何可以使用单个对话框选择文件或文件夹吗?
我不这么认为。 没有内置类可以轻松完成
调查
如果您查看tkFileDialog
模块的源代码,则Open
和Directory
类都继承自_Dialog
,位于tkCommonDialog
。
目前很好; 这些类很简单,只扩展了两种方法。 _fixresult
是一个钩子,它根据您的选项(有前途)进行过滤,而_fixoptions
添加正确的 tcl 参数(如初始目录)。
但是当我们到达 Dialog 类(_Dialog 的父类)时,我们看到它通过给定的名称调用 tcl 命令。 内置名称是“tk_getOpenFile”和“tk_chooseDirectory”。 在此之后,我们没有很多 Python 级别的命令自由。 如果我们去看看其他可用的 tcl 脚本,我们会很失望。
看起来你的选择是
ttk::getOpenFile
ttk::getSaveFile
ttk::chooseDirectory
ttk::getAppendFile
结论
老鼠! 幸运的是,使用列表框、输入字段、按钮(和其他 tk 内置函数)和 os 模块制作自己的对话框应该很容易。
简单替代
从您的评论看来,一个可行的简单解决方法可能是使用
directory = os.path.dirname(os.path.realpath(tkFileDialog.askopenfilename()))
他们必须选择一个文件,但“打开”按钮将“返回一个路径”,因为路径是从文件位置计算出来的
但我真的很想要!
如果出于某种原因您确实想要这种行为但不想重新制作小部件,则可以直接调用 tcl 脚本。 可以从 getOpenFile 复制代码并提供更宽松的参数以允许选择更通用的对象。 这不是我的专长,似乎是一个非常糟糕的主意,但这里是您直接调用 tcl 的方法,您可以在此处了解有关底层命令的更多信息。
我有过类似的问题。 最后,我使用 askopenfilename s () (复数)并从文件中拆分路径。 然后使用单选按钮,让用户选择是要处理目录中的所有文件,还是仅处理他们选择的文件。
filetypes = [('All files', '*.*'), ('CSV files', '*.csv'),]
data_list = askopenfilenames(title='Select folder', filetypes=filetypes)
data_dir = data_list[0].rsplit('/', 1)[0]
我提到它是因为 askopenfilename s () 没有得到太多建议,但更接近选择文件夹,就像 ctrl+A 所有文件一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.