跳转至

§3.1 信息类控件

字数 1490 个   代码 58 行   图片 20 张   阅读时间 6 分钟   访问量

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

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

一、信息类控件简述

1.1 什么是信息类控件

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

目前 maliang 内置的信息类控件有 TextImageLabelProgressBarTooltipSpinner

1.2 注意事项

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

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

二、信息类控件详述

2.1 Text

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

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

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

1
2
3
4
5
6
7
8
9
import maliang

root = maliang.Tk()
cv = maliang.Canvas(auto_zoom=True)
cv.place(width=1280, height=720)

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

root.mainloop()

效果如下:(1)

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

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 maliang

root = maliang.Tk()
cv = maliang.Canvas(auto_zoom=True)
cv.place(width=1280, height=720)

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

root.mainloop()

效果如下:

图2 图片控件

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

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

2.3 Label

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

下面的代码是一个示例:

1
2
3
4
5
6
7
8
9
import maliang

root = maliang.Tk()
cv = maliang.Canvas(auto_zoom=True)
cv.place(width=1280, height=720)

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

root.mainloop()

效果如下:

图3 标签控件

图3 标签控件

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

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

2.4 ProgressBar

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

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

下面是一个简单的示例:

1
2
3
4
5
6
7
8
9
import maliang

root = maliang.Tk()
cv = maliang.Canvas(auto_zoom=True)
cv.place(width=1280, height=720)

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

root.mainloop()

效果如下:

图4 进度条控件

图4 进度条控件

2.5 Tooltip

Tooltip 是工具提示框控件,简称提示框控件。它的作用就是在鼠标移至关联控件上面时显示出来以起到相应的提示作用。

特别注意:提示框无法跨画布显示

由于 maliang 的设计理念就是尽可能基于画布实现一切功能,所以提示框控件也是由画布绘制而成,无法跨出画布进行显示。

下面是一个简单的示例:

import maliang

root = maliang.Tk()
cv = maliang.Canvas(auto_zoom=True)
cv.place(width=1280, height=720)

pb = maliang.ProgressBar(cv, (10, 10))
pb.set(0.5)

maliang.Tooltip(pb, text="Loading... 50.0%")

root.mainloop()

效果如下:

图5 提示框控件

图5 提示框控件

2.6 Spinner

Spinner 是环形进度条,类似于 ProgressBar,但它是环形的,且目前相比于 ProgressBar 它有两个模式:确定模式和不定模式。

  • 确定模式("determinate"): 进度由用户控制,精确指定,表示加载进度确定的内容
  • 不定模式("indeterminate"): 进度自动呈规律变化,表示正在加载但加载进度无法确定的内容

很显然,目前 ProgressBar 只有“确定模式”,而 Spinner 目前两种都支持。那为什么另外一个没有“不定模式”呢?因为我懒(bushi)

下面是个简单的示例:

import maliang

root = maliang.Tk()
cv = maliang.Canvas(auto_zoom=True)
cv.place(width=1280, height=720)

maliang.Spinner(cv, (20, 20)).set(0.67)
maliang.Spinner(cv, (100, 20), mode="indeterminate")

root.mainloop()

效果如下:

图6 环形进度条控件

图6 环形进度条控件