已获原做者受权. 原系列地址: Python Tkinter
下面咱们将以 Tkinter 中最简单的控件: Label 控件, 开始这个系列的教程. 在 Tkinter 中, Label 控件用以显示文字和图片. Label 一般被用来展现信息, 而非与用户交互. (译者注: Label 也能够绑定点击等事件, 只是一般不这么用).
程序员的教程, 怎么能少了 Hello World . 咱们尊重这个传统, 但咱们不说 Hello World, 让咱们来秀出 Hello Tkinter 吧.
下面的 Python 脚本用 Tkinter 建立了一个带有 "Hello Tkinter" 字样的窗口. 你能够在 Python 的命令行解释器中逐行输入下面的脚本, 也能够将之存入一份文件, 好比 hello.py .php
from Tkinter import * # if you are working under Python 3, comment the previous line and comment out the following line #from tkinter import * root = Tk() w = Label(root, text="Hello Tkinter!") w.pack() root.mainloop()
若是你将上述脚本存入文件 hello.py, 那么能够这样启动它:python
$ python hello.py
若是你在 Linux Gnome 环境下运行上述命令, 会显示以下窗口:程序员
在 Windows 系统下是这个样子:编程
在 Tkinter 编程中, 必定少不了 Tkinter 中的 Tk 类. 上例中咱们经过星号 ( * ) 来将 Tkinter 中的全部模块引入命名空间.segmentfault
from Tkinter import *
要初始化一个 Tkinter 程序, 咱们须要一个 root 控件, 即根窗口, 它包括标题栏和其余一些由本地窗口系统提供的装饰. root 控件须要在建立其余控件前建立, 而且一个窗口只能有一个 root 控件.ide
root = Tk()
这以后的一行代码, 咱们建立了一个 Label 控件. 它的第一个参数是其父控件, 在咱们这个例子里就是上面的 root 控件. 所以这个 Label 控件是上面的 root 控件的一个子控件. 这个 Label 控件的第二个参数指示其所要显示的文字.oop
w = Label(root, text="Hello Tkinter!")
pack() 方法指示这个 Label 的大小为正好能够包裹其中的文字.布局
w.pack()
当咱们启动了 Tkinter 的消息循环 (event loop) 后, 窗口就会被显示出来:字体
root.mainloop()
上面的脚本会一直运行在这个消息队列中, 直到这个窗口被关闭.spa
上面咱们已经提到, Label 既能够显示文字, 也能够显示图片. 下面的例子中咱们将建立两个 Label, 一个用以显示文字, 一个用以显示图片:
from Tkinter import * root = Tk() logo = PhotoImage(file="../images/python_logo_small.gif") w1 = Label(root, image=logo).pack(side="right") explanation = """At present, only GIF and PPM/PGM formats are supported, but an interface exists to allow additional image file formats to be added easily.""" w2 = Label(root, justify=LEFT, padx = 10, text=explanation).pack(side="left") root.mainloop()
上面的脚本运行后, 在 Ubuntu 下显示以下:
justify
参数指示文字的对齐方向, 可选值为 RIGHT, CENTER, LEFT, 默认为 Center.padx
参数指定水平方向的边距, 默认为1像素.pady
参数指定竖直方向的边距, 默认为1像素.
上面的例子中, 若是去掉 justify
和 padx
参数, 那么上面的窗口会显示为这个样子:
想让文字显示在图片上面? 好办! 咱们只须要在一个 Label 控件中同时使用图片和文字的相关选项便可. 默认状况下, 若是为一个 Label 控件指定了图片, 那么这个 Label
就会只显示图片. 要让图片和文字一同显示, 就要使用 compound
选项. 设置其为 CENTER 将使文字显示在图片上方:
from Tkinter import * root = Tk() logo = PhotoImage(file="../images/python_logo_small.gif") explanation = """At present, only GIF and PPM/PGM formats are supported, but an interface exists to allow additional image file formats to be added easily.""" w = Label(root, compound = CENTER, text=explanation, image=logo).pack(side="right") root.mainloop()
咱们可让图片显示在左侧, 文字显示在右侧, 让文字向左对齐, 并在左右两侧空出 10 像素的边距:
w = Label(root, justify=LEFT, compound = LEFT, padx = 10, text=explanation, image=logo).pack(side="right")
设置 compound
为 BOTTOM, LEFT, RIGHT, TOP, 图片就会显示在相应的位置上.
诸如 Label, Text, Canvas 等控件, 支持指定字体, 经过 font
属性设置便可实现. 须要特别注意的是字体不是平台独立的.fg
(foreground) 属性能够指定字体的颜色, bg
属性能够指定控件的背景颜色.
from Tkinter import * root = Tk() Label(root, text="Red Text in Times Font", fg = "red", font = "Times").pack() Label(root, text="Green Text in Helvetica Font", fg = "light green", bg = "dark green", font = "Helvetica 16 bold italic").pack() Label(root, text="Blue Text in Verdana bold", fg = "blue", bg = "yellow", font = "Verdana 10 bold").pack() root.mainloop()
上例脚本运行后显示以下:
在下面的例子中, Label 中的文字将被自动加1, 直到按钮被点击时中止计数:
import Tkinter as tk counter = 0 def counter_label(label): def count(): global counter counter += 1 label.config(text=str(counter)) label.after(1000, count) count() root = tk.Tk() root.title("Counting Seconds") label = tk.Label(root, fg="green") label.pack() counter_label(label) button = tk.Button(root, text='Stop', width=25, command=root.destroy) button.pack() root.mainloop()
上面的脚本运行后窗口显示以下:
全系列:
[译][Tkinter 教程01] 入门: Label 控件
[译][Tkinter 教程02] Message 控件
[译][Tkinter 教程03] Button 控件
[译][Tkinter 教程04] Variable 类
[译][Tinkter 教程05] Radiobutton 控件
[译][Tkinter 教程06] Checkbox 控件
[译][Tkinter 教程07] Entry 控件
[译][Tkinter 教程08] Canvas 图形绘制
[译][Tkinter 教程09] Scale 控件
[译][Tkinter 教程10] Text 控件
[译][Tkinter 教程11] 对话框和消息框
[译][Tkinter 教程12] 布局管理 (Pack Place Grid)
[译][Tkinter 教程13] Mastermind 游戏
[译][Tkinter 教程14] menu 菜单
[译][Tkinter 教程15] event 事件绑定
译者水平有限, 若有疏漏, 欢迎指正.
已联系原做者受权. 原文地址:
Saying Hello with Labels