《零基础入门学习Python》第075讲:GUI的终极选择:Tkinter12

Tkinter 的基本组件我们已经介绍得七七八八了,剩下的一些我们在这节课全部都会讲解完毕。

(一)Message组件

Message(消息)组件是 Label 组件的变体,用于显示多行文本消息。众所周知,我们的Label 组件只能显示单行消息。Message 组件能够自动换行,并调整文本的尺寸使其适应给定的尺寸。

我们来举个例子,大家就明白了:

复制代码
  1. import tkinter as tk

  2. root = tk.Tk()

  3. w1 = tk.Message(root, text = "这是一则短消息", width = 100)

  4. w1.pack()

  5. w2 = tk.Message(root, text = "这是一则骇人听闻的长长长长长长长长长长长消息", width = 100)

  6. w2.pack()

  7. root.mainloop()

(二)Spinbox组件

Spinbox 组件(Tk8.4 新增)是 Entry 组件的变体,用于从一些固定的值中选取一个。众所周知,我们的Entry组件是能够让用户随心所欲输入数据的组件,Spinbox 组件就进一步限制用户输入的数据。

我们还是举个例子:

复制代码
  1. import tkinter as tk

  2. root = tk.Tk()

  3. w= tk.Spinbox(root, from_ = 0, to = 10)

  4. w.pack()

  5. root.mainloop()

我们可以通过上下点,输入 0 -10,另外,我们还是可以任意输入数据,我们可以通过改变 increment 选项的值,来改变步进。

你还可以通过元组指定允许输入的值:

复制代码
  1. import tkinter as tk

  2. root = tk.Tk()

  3. w= tk.Spinbox(root, values = ("python", "C", "java", "C#"))

  4. w.pack()

  5. root.mainloop()

(三)PanedWindow组件

PanedWindow 组件(Tk8.4 新增)是一个空间管理组件。跟 Frame 组件类似,都是为组件提供一个框架,不过 PanedWindow 允许让用户调整应用程序的空间划分。

不明白的话,可以先看下面的两个例子,就会豁然开朗了。

我们的窗格有简单的,例如两个窗格:上和下,左和右。

复制代码
  1. import tkinter as tk

  2. m = tk.PanedWindow(orient="vertical")

  3. m.pack(fill="both", expand=1)

  4. top = tk.Label(m, text="top pane")

  5. m.add(top)

  6. bottom = tk.Label(m, text="bottom pane")

  7. m.add(bottom)

  8. tk.mainloop()

创建一个 3 窗格的 PanedWindow 组件则需要一点小技巧:

复制代码
  1. import tkinter as tk

  2. #先创建左右的窗格

  3. m1 = tk.PanedWindow() #默认是左右分布的

  4. m1.pack(fill="both", expand=1)

  5. left = tk.Label(m1, text = "left pane")

  6. m1.add(left)

  7. m2 = tk.PanedWindow(orient = "vertical")

  8. m1.add(m2)

  9. top = tk.Label(m2, text = "top pane")

  10. m2.add(top)

  11. bottom = tk.Label(m2, text = "bottom pane")

  12. m2.add(bottom)

  13. tk.mainloop()

这里不同窗格事实上是有一条"分割线"(sash)隔开,虽然你看不到,但你却可以感受到它的存在。不信?不妨把鼠标缓慢移动到大概的位置,当鼠标指针改变的时候后拖拽鼠标......

但我们也可以把"分割线"给显式地显示出来,并且可以为它附上一个"手柄"(handle):

复制代码
  1. import tkinter as tk

  2. #先创建左右的窗格

  3. m1 = tk.PanedWindow(showhandle = True, sashrelief = "sunken") #默认是左右分布的

  4. m1.pack(fill="both", expand=1)

  5. left = tk.Label(m1, text = "left pane")

  6. m1.add(left)

  7. m2 = tk.PanedWindow(orient = "vertical", showhandle = True, sashrelief = "sunken")

  8. m1.add(m2)

  9. top = tk.Label(m2, text = "top pane")

  10. m2.add(top)

  11. bottom = tk.Label(m2, text = "bottom pane")

  12. m2.add(bottom)

  13. tk.mainloop()

图中的小方块就是 handle, 默认离边界为 8 个像素,可以通过 handlepad 选项来设置它的位置。

(四)Toplevel 组件

Toplevel 组件和 root 组件是一个级别的,Toplevel(顶级窗口)组件类似于 Frame 组件,但 Toplevel 组件是一个独立的顶级窗口,这种窗口通常拥有标题栏、边框等部件。

Toplevel 组件通常用在显示额外的窗口、对话框和其他弹出窗口上。

复制代码
  1. import tkinter as tk

  2. root = tk.Tk()

  3. def create():

  4. top = tk.Toplevel()

  5. top.title("Python tkinter")

  6. msg = tk.Message(top, text = "I love Python!")

  7. msg.pack()

  8. tk.Button(root, text = "创建顶级窗口", command = create).pack()

  9. root.mainloop()

想要几个就点几下。

得到的顶级窗口都是相互独立的,但是都是来自于 root 窗口,当 root 窗口关闭后,所有的顶级窗口都被关闭。

相关推荐
reasonsummer4 小时前
【办公类-100-01】20250515手机导出教学照片,自动上传csdn+最大化、最小化Vs界面
开发语言·python
Doker 多克4 小时前
Python-Django系列—日志
python·日志
苏三福5 小时前
ros2 hunmle bag 数据包转为图片数据 python版
开发语言·python·ros2humble
大神薯条老师6 小时前
Python零基础入门到高手8.4节: 元组与列表的区别
开发语言·爬虫·python·深度学习·机器学习·数据分析
z人间防沉迷k6 小时前
堆(Heap)
开发语言·数据结构·笔记·python·算法
小白学大数据7 小时前
Python爬虫如何应对网站的反爬加密策略?
开发语言·爬虫·python
Eric.Lee20217 小时前
Ubuntu shell指定conda的python环境启动脚本
python·ubuntu·conda·shell
芒果量化7 小时前
量化交易 - 网格交易策略实现与原理解析
python·算法·机器学习·金融
LetsonH7 小时前
Python工具链UV整合环境管理
开发语言·python·uv
欣然~7 小时前
基于深度学习进行运输系统优化
python·深度学习