跳转至

§3.1 信息类控件

字数 1298 个   代码 36 行   图片 12 张   阅读时间 5 分钟   访问量

温馨提示:切换网站主题可切换效果图的主题

本小节的图片大量涉及主题,你可以通过切换网站主题来查看在不同主题下程序运行的效果图,后面的章节也是一样的。网站的主题共有三种模式,分别对应 tkt 的主题三种模式。鼠标移至网站主题切换按钮下可查看当前主题。

一、信息类控件简述

1.1 什么是信息类控件

信息类控件就是指那些应该用于展示信息,而不具有额外功能的控件,如标签控件。

目前 tkt 内置的信息类控件有 TextImageLabelProgressBar

1.2 注意事项

信息类控件的本意就是展示信息的,其不应该包含其他额外的功能,如果需要控件有其他的功能,应该考虑使用其他对应的控件或者自定义一个符合自己需要的控件。

关于自定义控件,后续章节中会详细讲述。

二、信息类控件详述

2.1 Text

Text 是文本控件,它的用途是展示一些文本。这些文本可以随着画布的缩放而缩放,随程序的亮色与暗色而改变。

我们可以使用其 getset 方法来获取和设置控件所展示的文本内容。

下面这段代码会在坐标为 (10, 10) 的位置放置一个锚点为西北的文本,该文本的颜色会自动适应主题,同时可以响应画布的缩放。

1
2
3
4
5
6
7
8
9
import tkintertools as tkt

root = tkt.Tk()
cv = tkt.Canvas(root, zoom_item=True)
cv.place(width=1280, height=720)

tkt.Text(cv, (10, 10), text="Hello tkintertools!", anchor="nw")

root.mainloop()

效果如下:(1)

  1. 💡你可以通过更改网站主题来查看效果图在不同主题下的样子
图1 文本控件

实验性功能:控件大小的自动计算

目前对于控件大小的计算并非一定准确的,如果文本中存在换行符等可能导致文本呈现多行效果的字符,控件的大小都会计算错误,此时应该通过控件的初始化参数 position 来手动指定控件的大小,防止控件产生错误的外观。

不仅仅对控件 Text 是这样的,对于后面其它含文本的控件皆是如此。

关于 tkt 对控件大小的计算,见:get_text_size

2.2 Image

Image 是图片控件,用于展示图片,其可以响应画布的缩放,在没有安装 pillow 可选包的时候,仅支持 tkinter 原生图片格式(png 等),安装 pillow 之后可以支持更多的格式而无需更改任何代码。

特别注意:缺少 pillow 可能导致性能低下

在没有安装 pillow 的情况下,图片也是可以缩放的,但缩放的效率极低,极有可能导致窗口缩放时产生严重的卡顿,建议有图片缩放需求的朋友安装一下 pillow

如果您已经按照 §1.1 安装 tkintertools 中的推荐方式安装,则不需要关心这则说明。

与上面提到的 Text 控件类似,我们也可以用 getset 方法来获取和设置 Image 控件的内容。

下面的代码是一个简单的示例:

1
2
3
4
5
6
7
8
9
import tkintertools as tkt

root = tkt.Tk()
cv = tkt.Canvas(root, zoom_item=True)
cv.place(width=1280, height=720)

tkt.Image(cv, (100, 100), image=tkt.PhotoImage(file="./logo.png"), anchor="center")

root.mainloop()

效果如下:

图2 图片控件

示例中的图片文件是 tkt 的 Logo,可以在此处获取。

tkt 的 Image 相比于 tk 的图片展示会稍微方便一些,对于 tk 展示图片的方法,其 PhotoImage 类有一个问题,其必须是全局变量(保持引用)才可以展示图片,详情见官方文档,而 tkt 的 Image 会对此进行一定的处理,使得某些情况不会出现“空白图片”的问题。

2.3 Label

tkt 的 Label 稍稍不同于 tk 的 Label,同样是展示信息,但 tk 的 Label 的功能更多的是用上面讲到的 Text 来替代的。这里的 Label 更像是标签真正的意义,也就是用它来展示一个类似于分类标签的东西,比如 GitHub Issue 的标签那样。

下面的代码是一个示例:

1
2
3
4
5
6
7
8
9
import tkintertools as tkt

root = tkt.Tk()
cv = tkt.Canvas(root, zoom_item=True)
cv.place(width=1280, height=720)

tkt.Label(cv, (10, 10), text="Label")

root.mainloop()

效果如下:

图3 标签控件

图3 标签控件

温馨提示:部分控件外观与系统相关

部分控件在不同的操作系统下有不同的外观,这是为了使控件更符合操作系统的 UI 风格,一般情况下,都会使用 Windows11 风格的。当然,你也可以强制指定一种风格,在后续章节中会提到这个的。

2.4 ProgressBar

ProgressBar 是进度条控件,相比于 tk 的进度条,tkt 的进度条在外观上有了很大的改善,但功能还不是完整的,缺少了无进度模式。

与前面提到的控件类似,我们可以使用 getset 方法来获取和设置进度条的值,当设置的值小于 0 时被视为 0,大于 1 时被视为 1。

下面是一个简单的示例:

1
2
3
4
5
6
7
8
9
import tkintertools as tkt

root = tkt.Tk()
cv = tkt.Canvas(root, zoom_item=True)
cv.place(width=1280, height=720)

tkt.ProgressBar(cv, (10, 10)).set(0.5)

root.mainloop()

效果如下:

图4 进度条控件

图4 进度条控件