或许大家在使用 tkinter 模块时总感觉 tkinter 模块的功能不够强大,有些功能需要自己实现,但是!现在,我为大家带来了这个 tkinter 模块的最强辅助模块 —— tkintertools!虽然这个模块是由我本人自己编写的,但它功能依旧非常强大!我敢言:目前全网没人只用原生的 tkinter 模块做出过该模块能够做到的事情!除了我!
为什么强大?它可以做到以下操作:
- 使按钮等控件实现背景透明;
- 可以随心所欲地用 Place 几何布局操作控件的位置,从而实现复杂的布局;
- 用 Place 几何布局时依旧可以使控件的大小随窗口的变化而变化;
- 可以轻松实现渐变色;
- 默认外观十分富有美感;
- . . .
【本文章会随着模块的更新而进行动态修改】
模块基本信息
模块名称:tkintertools
描述:tkinter 模块的扩展模块
编写作者:小康2022
当前版本:2.1(2022/10/9)
模块源代码地址:小康2022 / tkintertools · GitCode
模块结构
一、引用模块
① random :用于产生随机的RGB码
② tkinter :基础模块
③ types :用于类型标注
④ typing :用于类型标注
二、常量
# 默认的文本前景颜色
COLOR_BLACK = ('#000000', '#000000', '#000000')
# 默认文本背景颜色
COLOR_WHITE = ('#FFFFFF', '#FFFFFF', '#FFFFFF')
# 默认的内部颜色
COLOR_FILL = ('#E1E1E1', '#E5F1FB', '#CCE4F7')
# 默认按钮外框颜色
COLOR_BUTTON = ('#C0C0C0', '#4A9EE0', '#4884B4')
# 默认文本外框颜色
COLOR_TEXT = ('#C0C0C0', '#5C5C5C', '#4A9EE0')
# 默认字体
FONT = ('楷体', 15)
# 默认控件外框宽度
BORDERWIDTH = 1
# 默认控件显示文本
TEXT = ''
三、主体结构
1、容器控件类
① Canvas:画布,用于承载虚拟控件和绘制其他细节
② Tk:窗口主体,具有处理关联事件的能力
2、虚拟画布基类
① _BaseWidget: 内部类,虚拟画布基类
② _TextWidget:内部类,虚拟画布文本控件基类
3、虚拟画布控件类
① CanvasLabel:虚拟画布标签类
② CanvasButton:虚拟画布按钮类
③ CanvasEntry:虚拟画布输入框类
④ CanvasText:虚拟画布文本框类
3、功能函数
① move_widget:按一定规则移动控件
② correct_text:修正文本长度,占有一定长度并使其居中
③ process_color:产生随机颜色和实现渐变色
4、测试函数
① _test:用于测试基础的功能
四、测试效果展示
模块使用方法
一、基本代码框架
1、基础代码
root = tkintertools.Tk() # 创建窗口
canvas = tkintertools.Canvas(root, 960, 540) # 创建虚拟画布,960和540分别为长度和宽度
canvas.pack(expand=True, fill='both') # 放置画布
"""
这里写其他代码
"""
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,
proportion_lock: bool = False,
*args: Any,
**kwargs: Any)
title: 窗口标题
geometry: 窗口大小及位置(格式:'宽度x高度+左上角横坐标+左上角纵坐标' 或者 '宽度x高度')
minisize: 窗口的最小缩放大小(默认为参数 geometry 的宽度与高度)
proportion_lock: 窗口缩放是否保持原比例
*args, **kwargs: 与原 tkinter 模块中的 Tk 类的参数相同
是不是与原来 tkinter 模块里面的不一样呢?
实例方法
与 tkinter 模块里面原生的 Tk 相同。
2、Canvas
用于承载虚拟的画布控件
初始化参数说明
Canvas(master, # type: Tk
width: int,
height: int,
lock: bool = True,
expand: bool = True,
**kwargs)
master: 父控件
width: 画布宽度
height: 画布高度
lock: 画布内控件的功能锁(False 时没有功能)
expand: 画布内控件是否能缩放
**kwargs: 与原 tkinter 模块内 Canvas 类的参数相同
实例方法
与 tkinter 模块里面原生的 Canvas 相同。
三、虚拟画布控件类
标准参数
canvas: 父画布容器控件
x, y: 控件左上角的横纵坐标
width, height: 控件的宽度与高度
text: 控件显示的文本
justify: 文本的对齐方式
borderwidth: 外框的宽度
font: 控件的字体设定 (字体, 大小, 样式)
color_text: 控件文本的颜色
color_fill: 控件内部的颜色
color_outline: 控件外框的颜色
特定参数
command: 按钮控件的关联函数
show: 文本控件的显示文本
limit: 文本控件的输入字数限制
space: 文本控件能否输入空格的标识
read: 文本控件的只读模式
详细说明
字体的值为一个三元组
例如: `('微软雅黑', 15, 'bold') `
颜色为一个包含三个 RGB 颜色字符串的元组
详细: `(正常颜色, 触碰颜色, 交互颜色)`
1、CanvasLabel
创建一个虚拟的标签控件,用于显示少量文本
初始化参数
CanvasLabel(canvas: Canvas,
x: int,
y: int,
width: int,
height: int,
text: str = TEXT,
borderwidth: int = BORDERWIDTH,
justify: str = tkinter.CENTER,
font: tuple[str, int, str] = FONT,
color_text: tuple[str, str, str] = COLOR_BLACK,
color_fill: tuple[str, str, str] = COLOR_FILL,
color_outline: tuple[str, str, str] = COLOR_BUTTON)
2、CanvasButton
创建一个虚拟的按钮,并执行关联函数
初始化参数
CanvasButton(canvas: Canvas,
x: int,
y: int,
width: int,
height: int,
text: str = TEXT,
borderwidth: int = BORDERWIDTH,
justify: str = tkinter.CENTER,
font: tuple[str, int, str] = FONT,
command: types.FunctionType | None = None,
color_text: tuple[str, str, str] = COLOR_BLACK,
color_fill: tuple[str, str, str] = COLOR_FILL,
color_outline: tuple[str, str, str] = COLOR_BUTTON)
3、CanvasEntry
创建一个虚拟的输入框控件,可输入单行少量字符,并获取这些字符
初始化参数
CanvasEntry(canvas: Canvas,
x: int,
y: int,
width: int,
height: int,
text: tuple[str] | str = TEXT,
show: str | None = None,
limit: int = 15,
space: bool = False,
borderwidth: int = BORDERWIDTH,
justify: str = tkinter.CENTER,
font: tuple[str, int, str] = FONT,
color_text: tuple[str, str, str] = COLOR_BLACK,
color_fill: tuple[str, str, str] = COLOR_WHITE,
color_outline: tuple[str, str, str] = COLOR_TEXT)
实例方法
change_text(value: str)
重新设定显示文字
str: 要修改的值
4、CanvasText
创建一个透明的虚拟文本框,用于输入多行文本和显示多行文本(只读模式)
初始化参数
CanvasText(canvas: Canvas,
x: int,
y: int,
width: int,
height: int,
text: tuple[str] | str = TEXT,
limit: int = 100,
space: bool = True,
read: bool = False,
borderwidth: int = BORDERWIDTH,
justify: str = tkinter.LEFT,
font: tuple[str, int, str] = FONT,
color_text: tuple[str, str, str] = COLOR_BLACK,
color_fill: tuple[str, str, str] = COLOR_WHITE,
color_outline: tuple[str, str, str] = COLOR_TEXT)
实例方法
① change_text
change_text(value: str)
重新设定显示文字
str: 要修改的值
② append
append(value: str)
添加文本
str: 要修改的值
四、功能函数
1、move_widget
平滑移动函数
以 smooth、shake、flat 三种模式,移动某些或某部分控件或控件的集合或图像
参数说明
move_widget(root: tkinter.Tk | tkinter.Canvas,
widget: Canvas | _BaseWidget,
dx: int,
dy: int,
fps: int,
mode: typing.Literal['smooth', 'shake', 'flat'],
ind: int = 0)
root: 根控件
widget: 要移动位置的控件
dx: 横向移动的距离(单位:像素)
dy: 纵向移动的距离
fps: 帧率(建议60)
mode: 模式,可选三种
smooth: 速度先慢后快再慢
shake: 和 smooth 一样,但是最后会回弹一下
flat: 平移
ind: 迭代索引,不要管
2、correct_text
修正字符串长度
可将目标字符串改为目标长度并居中对齐
参数说明
correct_text(length: int, string: str)
length: 目标长度
string: 要修改的字符串
3、process_color
颜色字符串处理函数(RGB码)
随机产生一个RGB颜色字符串
以及给出已有RGB颜色字符串的渐变RGB颜色字符串
process_color(color: str | None = None, key: float | str = '')
color: 要修改的颜色(为 None 时随机生成一个颜色)
key: 灰度