前面我们说过,Label 组件是用于在界面上输出描述性的标签,例如:提示用户“你所下载的影片含有未成年人限制的内容,请满18周岁后再点击观看!”。我们可以使用 Label 的文本输出功能来简单的实现,但是呢,现在大家基本上都拥有了自动过滤掉不和谐字眼的能力了,所以我们有必要在旁边加一个醒目的图片,试图起到一个警示和震慑的作用,如下图所示:
我们一起动手来实现吧:
import tkinter as tk
root = tk.Tk()
textLabel = tk.Label(root, text = "你所下载的影片含有未成年人限制的内容,请满18周岁后再点击观看!")
textLabel.pack()
photo = tk.PhotoImage(file = '18禁.gif')
imgLabel = tk.Label(root, image = photo)
imgLabel.pack()
root.mainloop()
运行结果:
貌似实现了,但是不太一样,我们要求的是:文字在左边,图片在右边,我们可以这样修改:
...
textLabel.pack(side ="left" )
...
imgLabel.pack(side = "right")
...
效果如下:(和要求的一模一样)
那还有人要提意见了:“你这文字太长,能不能对文字进行换行?”
可以的,因为 tkinter 的字符串 也是支持 转义字符 \n ,表示换行,因此,我们可以这样修改:
textLabel = tk.Label(root, text = "你所下载的影片含有未成年人限制的内容,\n请满18周岁后再点击观看!")
实现效果如下:
又有人有问题了:“文字应该左对齐,然后跟边框保留一定的间距,比较美观吧!”
没问题,这也是可以实现的。
左对齐 :只需要设置 Label 的 justify 选项就可以了,
justify 用法:
1. 定义如何对齐多行文本
2. 使用 "left","right" 或 "center"
3. 注意,文本的位置取决于 anchor 选项
4. 默认值是 "center"
所以,我们这样修改就可以了:
textLabel = tk.Label(root, text = "你所下载的影片含有未成年人限制的内容,\n请满18周岁后再点击观看!",
justify = "left",
padx = 10)
运行结果如图:
有些时候,你可能不想要图片和文字分开,例如你想把图片作为背景,文字显示在图片上面,那么 Label 组件可以做到吗?
No problem!你只需要简单的设置 compound 选项就可以了。
compound 用法:
1. 控制 Label 中文本和图像的混合模式
2. 默认情况下,如果有指定位图或图片,则不显示文本
3. 如果该选项设置为 "center",文本显示在图像上(文本重叠图像)
4. 如果该选项设置为 "bottom","left","right" 或 "top",那么图像显示在文本的旁边(如 "bottom",则图像在文本的下方)
5. 默认值是 NONE
import tkinter as tk
root = tk.Tk()
photo = tk.PhotoImage(file = 'bg.gif')
theLabel = tk.Label(root,
text = """一剪梅·红藕香残玉簟秋\n李清照 宋 \n
红藕香残玉簟秋。轻解罗裳,独上兰舟。\n云中谁寄锦书来,雁字回时,月满西楼。
花自飘零水自流。一种相思,两处闲愁。\n此情无计可消除,才下眉头,却上心头。\n""",
justify = "center",
image = photo,
compound = "center",
font = ("华文行楷", 25),
fg = "black",
)
theLabel.pack(side = "right")
root.mainloop()
运行结果如下:
接下来,我们来讲讲 Botton 组件,Botton 就是按钮,Botton 的绝大多数 选项 都和 Label 是一样的,不过,Bottom 有一个功能,就是可以接收用户的信息,简而言之,Botton 组件就是用于让用户自己说:“干”,然后通过按钮上的文字让用户清楚按下此按钮是干什么用的,相信大家还记得,Botton 组件有一个叫做 command 的选项,用于指定一个函数或者方法,它的作用就是当用户点下这个按钮的时候,tkinter 就会自动调用这个指定的函数或是方法,好了,接下来,我们来修改第一个例子,添加依噶按钮,然后在按钮被按下时,Label 文本发生改变。
OK,想要让文本发生改变,只需要设置一个名为 textvariable 的选项就可以了:
textvariable 用法
1. Label 显示 Tkinter 变量(通常是一个 StringVar 变量)的内容
2. 如果变量被修改,Label 的文本会自动更新
我还是在例子中给大家讲解:
import tkinter as tk
def callback():
var.set("吹吧你,我才不信呢!")
root = tk.Tk()
frame1 = tk.Frame(root)
frame2 = tk.Frame(root)
var = tk.StringVar()
var.set("你所下载的影片含有未成年人限制的内容,\n请满18周岁后再点击观看!")
textLabel = tk.Label(frame1, textvariable = var, justify = "left")
textLabel.pack(side = "left")
photo = tk.PhotoImage(file = '18禁.gif')
imgLabel = tk.Label(frame1, image = photo)
imgLabel.pack(side = "right")
theButton = tk.Button(frame2, text = "我已满18周岁", command = callback)
theButton.pack()
frame1.pack(padx = 10, pady = 10)
frame2.pack(padx = 10, pady = 10)
root.mainloop()
运行结果如下:
点击按钮:
。