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

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

(一)Message组件

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

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

import tkinter as tk

root = tk.Tk()

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

root.mainloop()

(二)Spinbox组件

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

我们还是举个例子:

import tkinter as tk

root = tk.Tk()

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

root.mainloop()

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

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

import tkinter as tk

root = tk.Tk()

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

root.mainloop()

(三)PanedWindow组件

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

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

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

import tkinter as tk

m = tk.PanedWindow(orient="vertical")
m.pack(fill="both", expand=1)

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

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

tk.mainloop()

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

import tkinter as tk

#先创建左右的窗格
m1 = tk.PanedWindow()  #默认是左右分布的
m1.pack(fill="both", expand=1)

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

m2 = tk.PanedWindow(orient = "vertical")
m1.add(m2)

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

tk.mainloop()

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

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

import tkinter as tk

#先创建左右的窗格
m1 = tk.PanedWindow(showhandle = True, sashrelief = "sunken")  #默认是左右分布的
m1.pack(fill="both", expand=1)

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

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

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

tk.mainloop()

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

(四)Toplevel 组件

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

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

import tkinter as tk

root = tk.Tk()

def create():
    top = tk.Toplevel()
    top.title("Python tkinter")

    msg = tk.Message(top, text = "I love Python!")
    msg.pack()
    
tk.Button(root, text = "创建顶级窗口", command = create).pack()

root.mainloop()

想要几个就点几下。

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

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值