和 Windows 编程类似,在 Tkinter 中最常用的也是一些组件。Tkinter几乎包含其他图形界面库所包含的全部组件,不同的组件可以完成不同的任务。
标签(Label)用来显示静态的文本信息。创建一个标签最简单,只需要一个参数,即父窗口。
label_obj = tk.Label(main_win)
当然还可以设置其他的属性,如背景颜色、对齐方式等。
下面实现一个有意思的标签,用鼠标单击该标签时,标签的内容会发生改变。这些显示在标签中的内容来自一些心灵鸡汤。
- import sys
- if sys.version_info.major == 3:
- import tkinter as tk
- elif sys.version_info.major == 2:
- import Tkinter as tk
- import random # 引入random库
- # 显示的内容,每次随机从这里挑选一条出来显示
- idiom = [
- u"""世上任何生命都不是尽善尽美的""",
- u"""让我们怀着善良的心去做成人之美之事""",
- u"""心存大爱,则无可阻之道""",
- u"""心存美好,则无可恼之事""",
- u"""做人无德不足以立身""",
- u"""微笑可以减轻紧张的情绪和压力""",
- u"""退一步,海阔天空""",
- u"""心存善良,则无可恨之人""",
- u"""人生的最佳状态是淡定从容""",
- u"""以责人之心责己,以恕己之心恕人""",
- u"""一个人的涵养,来自一颗包容的心""",
- u"""善良是心湖绽放柔媚的花朵""",
- u"""努力是一种生活态度,与年龄无关""",
- u"""不为困苦所屈服""",
- u"""人生因有梦想而充满动力""",
- u"""坚持,是生命的一种毅力""",
- u"""努力是一种生活态度,与年龄无关"""
- ]
- # 标签被单击的处理函数,当用鼠标左键单击标签时这个函数被调用
- def label_click_handler(events):
- selected = random.randint(0, len(idiom)-1)
- label_obj1['text'] = idiom[selected] # 修改标签的内容
- root = tk.Tk() # 初始化Tk()
- root.title(u"标签用法演示") # 设置窗口标题
- root.geometry("400x80") # 宽x高
- # 不可以调整窗口大小
- root.resizable(width=False, height=False)
- selected = random.randint(0, len(idiom)-1)
- label_obj1 = tk.Label(root, text=idiom[selected], width=380, height=60)
- # 鼠标左键单击了标签,处理函数是label_click_handler()
- label_obj1.bind("<Button-1>",label_click_handler)
- label_obj1.pack(side=tk.LEFT)
- root.mainloop() # 进入消息循环
运行后可以看到如图 1 所示的窗口。
标签除了显示文本外,也可以显示图片。下面的例子通过属性 image 来设置标签上的图片:
- import sys
- if sys.version_info.major == 3:
- import tkinter as tk
- elif sys.version_info.major == 2:
- import Tkinter as tk
- root = tk.Tk() # 初始化Tk()
- root.title(u"图片标签演示") # 设置窗口标题
- root.geometry("200x200") # 宽x高
- # 不可以调整窗口大小
- root.resizable(width=False, height=False)
- # 打开文件dog.png
- pic1 = tk.PhotoImage(file="dog.png")
- # 通过参数image来设定图片
- label_obj1 = tk.Label(root, image=pic1, width=180, height=180)
- label_obj1.pack(side=tk.TOP)
- root.mainloop() # 进入消息循环
运行后可以看到图 2 所示的窗口。