tkinter 模块的最强辅助模块 —— tkintertools(自制)

发布于:2022-10-17 ⋅ 阅读:(820) ⋅ 点赞:(0)

        或许大家在使用 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

平滑移动函数

smoothshakeflat 三种模式,移动某些或某部分控件或控件的集合或图像

参数说明

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: 灰度

实战效果展示

本文含有隐藏内容,请 开通VIP 后查看