模块基本信息
模块名称:tkintertools
模块描述:tkinter 模块的扩展模块
编写作者:小康2022
当前版本:2.5(2022/11/21)
运行要求:Python3.10 及以上版本(新版只需要3.7以及3.7以上)
模块源代码下载地址:tkintertools(最新版)
模块源代码仓库地址:小康2022 / tkintertools · GitCode
模块结构
一、引用模块
① sys:用于检测 Python 版本信息
② tkinter:基础模块
③ typing:用于类型提示
二、常量
COLOR_FILL_BUTTON = '#E1E1E1', '#E5F1FB', '#CCE4F7', '#F0F0F0' # 默认的按钮内部颜色 COLOR_FILL_TEXT = '#FFFFFF', '#FFFFFF', '#FFFFFF', '#F0F0F0' # 默认的文本内部颜色 COLOR_OUTLINE_BUTTON = '#C0C0C0', '#4A9EE0', '#4884B4', '#D5D5D5' # 默认按钮外框颜色 COLOR_OUTLINE_TEXT = '#C0C0C0', '#5C5C5C', '#4A9EE0', '#D5D5D5' # 默认文本外框颜色 COLOR_TEXT = '#000000', '#000000', '#000000', '#A3A9AC' # 默认的文本颜色 COLOR_NONE = '', '', '', '' # 透明颜色 BORDERWIDTH = 1 # 默认控件外框宽度 CURSOR = '│' # 文本光标 FONT = '楷体', 15 # 默认字体 LIMIT = -1 # 默认文本长度 NULL = '' # 空字符 RADIUS = 0 # 默认控件圆角半径
三、主体结构
1、容器控件类
① Tk:窗口主体,具有处理关联事件和缩放控件及图像的能力
② Toplevel: 顶级窗口,和 Tk 类似,但有着 tkinter 模块原来的 Toplevel 类同样的功能
③ Canvas:画布,用于承载虚拟控件和绘制其他细节
2、虚拟画布基类
① _BaseWidget:内部类,虚拟画布控件基类
② _TextWidget:内部类,虚拟画布文本控件基类
3、虚拟画布控件类
① CanvasLabel:虚拟画布标签类
② CanvasButton:虚拟画布按钮类
③ CanvasEntry:虚拟画布输入框类
④ CanvasText:虚拟画布文本框类
4、工具类
① PhotoImage: 具有加载与缩放 png 图片和解析并播放 gif 图片的功能
5、功能函数
① move_widget:可按照按一定规则(函数)移动控件
② correct_text:修正文本长度,占有一定长度并使其居中、靠左或靠右
③ change_color:产生渐变色及对比色
四、测试程序
测试程序就是直接运行该模块本身的效果(该测试函数名为 test,可引入其并运行以查看测试效果) 。下面的效果就是测试程序运行的结果,说明一下,窗口带有一点透明效果,关闭窗口时会有一个关闭询问(忘记展示出来了 T_T)。这里只展示了虚拟控件的默认外观,它们也可以自定义外观,甚至可以透明,以方便大家使用背景图片来装饰我们的窗口!
1、基本测试
基本测试
2、图像测试
图像测试
3、颜色测试
颜色测试
模块使用方法
一、基本框架
1、基本框架代码
import tkintertools root = tkintertools.Tk() # 创建窗口 canvas = tkintertools.Canvas(root, 960, 540) # 创建虚拟画布,960和540分别为长度和宽度 canvas.place(x=0, y=0) # 放置画布 """ 这里写其他代码 """ root.mainloop() # 消息事件循环
2、效果展示
代码基础框架
是不是感觉和 tkinter 模块的基本框架差别不大,只是多了一个 Canvas 对吧?对!就这么简单,与原来的 tkinter 模块相比,改变的其实只有一个,那就是控件的承载容器变了。tkinter 模块里面是 Tk,而这里实际上是 Canvas,这一点很重要!
二、容器控件类
1、Tk
用于集中处理 Canvas 容器控件绑定的关联事件以及缩放操作
初始化参数说明
Tk(title: str | None = None, geometry: str | None = None, minisize: tuple[int, int] | None = None, alpha: float | None = None, proportion_lock: bool = False, shutdown=None, # type: function | None **kw)
title: 窗口标题
geometry: 窗口大小及位置(格式:'宽度x高度+左上角横坐标+左上角纵坐标' 或者 '宽度x高度')
minisize: 窗口的最小缩放大小(为 None 时会自动改为参数 geometry 的匹配值)
alpha: 窗口透明度,范围为0~1,0为完全透明
proportion_lock: 窗口缩放是否保持原比例
shutdown: 关闭窗口之前执行的函数(会覆盖原来的关闭操作)
**kw: 与原 tkinter 模块中的 Tk 类的参数相同
是不是与原来 tkinter 模块里面的不一样呢?实际上,原 tkinter 模块里面对 Tk 类的一些操作(什么方法啊,函数啊之类的)都适用于这个新 Tk 类。
实例属性
① width: 窗口的初始宽度
② height: 窗口的初始高度
③ canvas_list: Tk 类所承载的 Canvas 类的列表
④ toplevel_list: Tk 类的所有子窗口 Toplevel 的列表
实例方法
与 tkinter 模块里面原生的 Tk 相同。
详细用法
这里就简单地给个示例吧。示例窗口略微带点透明度。Tk 详细用法
以上示例的源代码如下:
import tkintertools from tkinter.messagebox import askyesno shutdown = lambda:root.quit() if askyesno('提示', '确认关闭吗?') else None root = tkintertools.Tk('tkintertools辅助模块操作说明', '540x360', alpha=0.8, shutdown=shutdown) root.mainloop()
上面代码中,关于 tkinter 的库(子库 messagebox)和 tkintertools 都用到了,也说明了 tkinter 模块和 tkintertools 模块是兼容的。
2、Toplevel
用法类似于原 tkinter 模块里的 Toplevel,同时增加了 Tk 的功能
初始化参数说明
Toplevel(master: Tk, title: str | None = None, geometry: str | None = None, minisize: tuple[int, int] | None = None, alpha: float | None = None, proportion_lock: bool = False, shutdown=None, # type: function | None **kw)
master: 父窗口,一般指 Tk (也可以是 Toplevel,即 Toplevel 的 Toplevel)
title: 窗口标题
geometry: 窗口大小及位置(格式:'宽度x高度+左上角横坐标+左上角纵坐标' 或者 '宽度x高度')
minisize: 窗口的最小缩放大小(为 None 时会自动改为参数 geometry 的匹配值)
alpha: 窗口透明度,范围为0~1,0为完全透明
proportion_lock: 窗口缩放是否保持原比例
shutdown: 关闭窗口之前执行的函数(会覆盖原来的关闭操作)
**kw: 与原 tkinter 模块中的 Toplevel 类的参数相同
其余的用法都和 Tk 类差不多啦。
实例属性
① width: 新窗口的初始宽度
② height: 新窗口的初始高度
③ canvas_list: Toplevel 类所承载的 Canvas 类的列表
④ toplevel_list: Toplevel 类的所有子窗口 Toplevel 的列表
实例方法
这个和 tkinter 原生的 Toplevel 一样啦。