资料内容:
了解 Tkinter 如何封装 Tcl/Tk
当你的应用程序使用 Tkinter 的类和方法时,Tkinter 内部汇编代表 Tcl/Tk 命令的
字符串,并在连接到你的应用程序的 Tk 实例的 Tcl 解释器中执行这些命令。
无论是试图浏览参考文档,或是试图找到正确的方法或选项,调整一些现有的代码,
亦或是调试 Tkinter 应用程序,有时候理解底层 Tcl/Tk 命令是什么样子的会很有用。
为了说明这一点,下面是 Tcl/Tk 等价于上面 Tkinter 脚本的主要部分。
ttk::frame .frm -padding 10
grid .frm
grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0
grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0
Tcl 的语法类似于许多 shell 语言,其中第一个单词是要执行的命令,后面是该命令
的参数,用空格分隔。不谈太多细节,请注意以下几点:
• 用于创建窗口小部件(如 ttk::frame)的命令对应于 Tkinter 中的 widget
类。
• Tcl 窗口控件选项(如 -tex)对应于 Tkinter 中的关键字参数。
• 在 Tcl 中,小部件是通过 路径名 引用的(例如 .frm.btn),而 Tkinter 不使
用名称,而是使用对象引用。
• 控件在控件层次结构中的位置在其(层次结构)路径名中编码,该路径名使用一
个 . (点)作为路径分隔符。根窗口的路径名是 . (点)。在 Tkinter 中,层
次结构不是通过路径名定义的,而是通过在创建每个子控件时指定父控件来定义
的。
• 在 Tcl 中以独立的 命令 实现的操作(比如 grid 和 destroy )在 Tkinter 控件
对象上以 方法 表示。稍后您将看到,在其他时候,Tcl 在控件对象调用的方
法,在 Tkinter 也有对应的使用。