python:tkinter —— Tcl/Tk 的 Python 接口


tkinter 包 (“Tk 接口”) 是针对 Tcl/Tk GUI 工具包的标准 Python 接口。 Tk 和 tkinter 在大多数 Unix 平台,包括 macOS,以及 Windows 系统上均可使用。

若在命令行执行 python -m tkinter,应会弹出一个简单的 Tk 界面窗口, 表明 tkinter 包已安装完成,还会显示当前安装的 Tcl/Tk 版本,以便阅读对应版本的 Tcl/Tk 文档。

Tkinter 支持众多的 Tcl/Tk 版本,带或不带多线程版本均可。官方的 Python 二进制版本捆绑了 Tcl/Tk 8.6 多线程版本。关于可支持版本的更多信息,请参阅 _tkinter 模块的源代码。

Tkinter 并不只是做了简单的封装,而是增加了相当多的代码逻辑,让使用体验更具 Python 风格(pythonic)

架构

Tcl/Tk 不是只有单个库,而是由几个不同的模块组成的,每个模块都有各自的功能和各自的官方文档。 Python 的二进制发行版还会再附加一个模块。

Tcl
Tcl 是一种动态解释型编程语言,正如 Python 一样。尽管它可作为一种通用的编程语言单独使用,但最常见的用法还是作为脚本引擎或 Tk 工具包的接口嵌入到 C 程序中。Tcl 库有一个 C 接口,用于创建和管理一个或多个 Tcl 解释器实例,并在这些实例中运行 Tcl 命令和脚本,添加用 Tcl 或 C 语言实现的自定义命令。每个解释器都拥有一个事件队列,某些部件可向解释器发送事件交由其处理。与 Python 不同,Tcl 的执行模型是围绕协同多任务而设计的,Tkinter 协调了两者的差别(详见 Threading model )。

Tk
Ttk
带有主题的 Tk(Ttk)是较新加入的 Tk 部件,相比很多经典的 Tk 部件,在各平台提供的界面更加美观。自 Tk 8.5 版本开始,Ttk 作为 Tk 的成员进行发布。Python 则捆绑在一个单独的模块中, tkinter.ttk。

在内部,Tk 和 Ttk 使用下层操作系统的工具库,例如在 Unix/X11 上是 Xlib,在 macOS 上是 Cocoa,在 Windows 上是 GDI。

当你的 Python 应用程序使用 Tkinter 中的某个类,例如创建一个部件时,tkinter 模块将首先生成一个 Tcl/Tk 命令字符串。 它会把这个 Tcl 命令字符串传给内部的 _tkinter 二进制模块,后者将随后调用 Tcl 解释器来对其求值。 Tcl 解释器随后将对 Tk 和/和 Ttk 包发起调用,它们又将继续对 Xlib, Cocoa 或 GDI 发起调用。

Tkinter 模块

对 Tkinter 的支持分布在多个模块中。 大多数应用程序将需要主模块 tkinter,以及 tkinter.ttk 模块,后者提供了带主题的现代部件集及相应的 API:

from tkinter import *
from tkinter import ttk
class tkinter.Tk(screenName=None, baseName=None, className=‘Tk’, useTk=True, sync=False, use=None)
构造一个最高层级的 Tk 部件,这通常是一个应用程序的主窗口,并为这个部件初始化 Tcl 解释器。 每个实例都有其各自所关联的 Tcl 解释器。

Tk 类通常全部使用默认值来初始化。 不过,目前还可识别下列关键字参数:

screenName
当(作为字符串)给出时,设置 DISPLAY 环境变量。 (仅限 X11)

baseName
预置文件的名称。 在默认情况下,baseName 是来自于程序名称 (sys.argv[0])。

className
控件类的名称。 会被用作预置文件同时也作为 Tcl 发起调用的名称 (interp 中的 argv0)。

useTk
如果为 True,则初始化 Tk 子系统。 tkinter.Tcl() 函数会将其设为 False。

sync
如果为 True,则同步执行所有 X 服务器命令,以便立即报告错误。 可被用于调试。 (仅限 X11)

use
指定嵌入应用程序的窗口 id,而不是将其创建为独立的顶层窗口。 id 必须以与顶层控件的 -use 选项值相同的方式来指定(也就是说,它具有与 winfo_id() 的返回值相同的形式)。

请注意在某些平台上只有当 id 是指向一个启用了 -container 选项的 Tk 框架或顶层窗口时此参数才能正确生效。

Tk 读取并解释预置文件,其名称为 .className.tcl 和 .baseName.tcl,进入 Tcl 解释器并基于 .className.py 在 .baseName.py 的内容调用 exec()。 预置文件的路径为 HOME 环境变量,或者如果它未被设置,则为 os.curdir。

tk
通过实例化 Tk 创建的 Tk 应用程序对象。 这提供了对 Tcl 解释器的访问。 每个被附加到相同 Tk 实例的控件都具有相同的 tk 属性值。

master
包含此控件的控件对象。 对于 Tk,master 将为 None 因为它是主窗口。 术语 master 和 parent 是类似的且有时作为参数名称被交替使用;但是,调用 winfo_parent() 将返回控件名称字符串而 master 将返回控件对象。 parent/child 反映了树型关系而 master/slave 反映了容器结构。

children
以 dict 表示的此控件的直接下级其中的键为子控件名称而值为子实例对象。

tkinter.Tcl(screenName=None, baseName=None, className=‘Tk’, useTk=False)
Tcl() 函数是一个工厂函数,它创建的对象类似于 Tk 类创建的,只是不会初始化 Tk 子系统。这在调动 Tcl 解释器时最为有用,这时不想创建多余的顶层窗口,或者无法创建(比如不带 X 服务的 Unix/Linux 系统)。由 Tcl() 创建的对象可调用 loadtk() 方法创建一个顶层窗口(且会初始化 Tk 子系统)。

提供 Tk 支持的模块包括:

tkinter
主 Tkinter 模块。

tkinter.colorchooser
让用户选择颜色的对话框。

tkinter.commondialog
本文其他模块定义的对话框的基类。

tkinter.filedialog
允许用户指定文件的通用对话框,用于打开或保存文件。

tkinter.font
帮助操作字体的工具。

tkinter.messagebox
访问标准的 Tk 对话框。

tkinter.scrolledtext
内置纵向滚动条的文本组件。

tkinter.simpledialog
基础对话框和一些便捷功能。

tkinter.ttk
在 Tk 8.5 中引入的带主题的控件集,提供了对应于 tkinter 模块中许多经典控件的现代替代。

附加模块:

_tkinter
一个包含低层级 Tcl/Tk 接口的二进制模块。 它会被主 tkinter 模块自动导入,且永远不应被应用程序员所直接使用。 它通常是一个共享库(或 DLL),但在某些情况下可能被动态链接到 Python 解释器。

idlelib
Python 的集成开发与学习环境(IDLE)。 基于 tkinter。

tkinter.constants
当向 Tkinter 调用传入各种形参时可被用来代替字符串的符号常量。 由主 tkinter 模块自动导入。

tki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FuncPlotCalc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值