Python Tkinter:将小部件添加到文件对话框

时间:2013-02-04 12:12:00

标签: python tkinter filedialog

我正在使用Tkinter Python 2.62.7来编写图形用户界面。

这些用户界面包含用于打开文件和从tkFileDialog模块保存数据的对话框。我想调整对话框并添加一些其他条目小部件,例如让用户发表评论。

有没有办法这样做?

似乎文件对话框直接来自操作系统。在Tkinter中,它们派生自tkCommonDialog模块中的Dialog类,并调用框架窗口小部件的tk.call("tk_getSaveFile")方法(在本例中为保存数据)。

我无法找到定义此方法的位置。

2 个答案:

答案 0 :(得分:4)

call方法在_tkinter.c中定义,但您的特定任务没有任何有趣的内容。它只调用一个Tcl命令,命令tk_getSaveFile完成所有工作。

是的,当 操作系统上的原生文件对话框时,tk_getSaveFile会使用它们(例如,在Windows上使用GetSaveFileName)。可以在那里添加小部件,但不能没有篡改Tk的C源。如果您确定您的目标使用非本机Tk对话框,则可以通过从Tk中删除::tk::dialog::file::过程来向其窗口小部件层次结构添加内容(请参阅library/tkfbox.tcl)。< / p>

我宁愿选一个alternative implementation of tk_getSaveFile,用纯Tcl / Tk编写,从不使用OS工具。这样,我们可以确定它的布局对于所有操作系统都是相同的,并且它不会随着新版本的Tk突然改变。为它周围的python提供一个方便的API仍然是微不足道的,但至少,它是可能的。

答案 1 :(得分:1)

我不得不摆脱canvasx / y语句。该行现在只需阅读set item [$data(canvas) find closest $x $y],效果很好。 $data(canvas) canvasx $x因其自身效果良好,但与find closest无关,如果它是用两行写的话。