《零基础入门学习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 窗口关闭后,所有的顶级窗口都被关闭。

相关推荐
计算机毕设小月哥8 分钟前
【Hadoop+Spark+python毕设】中风患者数据可视化分析系统、计算机毕业设计、包括数据爬取、Spark、数据分析、数据可视化、Hadoop
后端·python·mysql
Keep_Trying_Go10 分钟前
基于Zero-Shot的目标计数算法详解(Open-world Text-specified Object Counting)
人工智能·pytorch·python·算法·多模态·目标统计
计算机毕设匠心工作室23 分钟前
【python大数据毕设实战】强迫症特征与影响因素数据分析系统、Hadoop、计算机毕业设计、包括数据爬取、数据分析、数据可视化、机器学习、实战教学
后端·python·mysql
Trouville012 小时前
Pycharm软件初始化设置,字体和shell路径如何设置到最舒服
ide·python·pycharm
高-老师2 小时前
WRF模式与Python融合技术在多领域中的应用及精美绘图
人工智能·python·wrf模式
小白学大数据2 小时前
基于Splash的搜狗图片动态页面渲染爬取实战指南
开发语言·爬虫·python
零日失眠者2 小时前
【文件管理系列】003:重复文件查找工具
后端·python
FreeCode2 小时前
一文了解LangGraph智能体设计开发过程:Thinking in LangGraph
python·langchain·agent
西柚小萌新3 小时前
【深入浅出PyTorch】--9.使用ONNX进行部署并推理
人工智能·pytorch·python
nvd113 小时前
SSE 流式输出与 Markdown 渲染实现详解
javascript·python