【问题标题】:Python Tkinter: Adding widgets to file dialogsPython Tkinter:将小部件添加到文件对话框
【发布时间】:2013-01-19 03:22:57
【问题描述】:

我将TkinterPython 2.62.7 一起用于对图形用户界面进行编程。

这些用户界面包含用于打开文件和保存来自tkFileDialog 模块的数据的对话框。我想调整对话框并添加一些进一步的条目小部件,例如让用户离开 cmets。

有什么办法可以做到吗?

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

我找不到这个方法是在哪里定义的。

【问题讨论】:

  • 如果一切都失败了,您可以使用顶级窗口、ttk.Treeview、Button、ttk.Combobox 和 OS 模块使用 Tkinter/ttk 创建自己的文件对话框。

标签: python tkinter filedialog


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您对tkfbox.tcl的引用。我会先这样试试。如果这不起作用,我将选择 FileDialog 而不是 TkFileDialog 模块。
【解决方案2】:

我不得不摆脱 canvasx/y 语句。该行现在只是读取set item [$data(canvas) find closest $x $y],效果很好。 $data(canvas) canvasx $x 自己的作品很好,但与find closest 无关,如果它写成两行也没有。

【讨论】:

    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多