资讯专栏INFORMATION COLUMN

[译][Tkinter 教程01] 入门: Label 控件

Sike / 1121人阅读

摘要:已获原作者授权原系列地址下面我们将以中最简单的控件控件开始这个系列的教程在中控件用以显示文字和图片通常被用来展示信息而非与用户交互译者注也可以绑定点击等事件只是通常不这么用程序员的教程怎么能少了我们尊重这个传统但我们不说让我们来秀出吧下面的

已获原作者授权. 原系列地址: Python Tkinter
Hello Tkinter Label

下面我们将以 Tkinter 中最简单的控件: Label 控件, 开始这个系列的教程. 在 Tkinter 中, Label 控件用以显示文字和图片. Label 通常被用来展示信息, 而非与用户交互. (译者注: Label 也可以绑定点击等事件, 只是通常不这么用).
程序员的教程, 怎么能少了 Hello World . 我们尊重这个传统, 但我们不说 Hello World, 让我们来秀出 Hello Tkinter 吧.
下面的 Python 脚本用 Tkinter 创建了一个带有 "Hello Tkinter" 字样的窗口. 你可以在 Python 的命令行解释器中逐行输入下面的脚本, 也可以将之存入一份文件, 比如 hello.py .

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 hello.py 

如果你在 Linux Gnome 环境下运行上述命令, 会显示如下窗口:

在 Windows 系统下是这个样子:

逐行解释

在 Tkinter 编程中, 一定少不了 Tkinter 中的 Tk 类. 上例中我们通过星号 ( * ) 来将 Tkinter 中的所有模块引入命名空间.

from Tkinter import *

要初始化一个 Tkinter 程序, 我们需要一个 root 控件, 即根窗口, 它包括标题栏和其他一些由本地窗口系统提供的装饰. root 控件需要在创建其他控件前创建, 并且一个窗口只能有一个 root 控件.

root = Tk() 

这之后的一行代码, 我们创建了一个 Label 控件. 它的第一个参数是其父控件, 在我们这个例子里就是上面的 root 控件. 因此这个 Label 控件是上面的 root 控件的一个子控件. 这个 Label 控件的第二个参数指示其所要显示的文字.

w = Label(root, text="Hello Tkinter!")

pack() 方法指示这个 Label 的大小为正好可以包裹其中的文字.

w.pack()

当我们启动了 Tkinter 的消息循环 (event loop) 后, 窗口就会被显示出来:

root.mainloop()

上面的脚本会一直运行在这个消息队列中, 直到这个窗口被关闭.

在 Label 中显示图片

上面我们已经提到, 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像素.
上面的例子中, 如果去掉 justifypadx 参数, 那么上面的窗口会显示为这个样子:

想让文字显示在图片上面? 好办! 我们只需要在一个 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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41488.html

相关文章

  • [][Tkinter 教程03] Button 控件

    摘要:已获原作者授权原系列地址简介控件是一种标准控件用来展现不同样式的按钮控件被用以和用户交互比如按钮被鼠标点击后某种操作被启动和控件类似按钮可以展示图片或者文字不同的是控件可以指定字体控件只能使用单一的字体上的文字可以多行显示可以将一个函数或方 已获原作者授权. 原系列地址: Python Tkinter 简介 Button 控件是一种标准 Tkinter 控件, 用来展现不同样式的按钮...

    googollee 评论0 收藏0
  • [][Tkinter 教程14] menu 菜单

    摘要:已获原作者授权原系列地址简介一提到这个词很多人首先想到的是餐馆里的菜单虽然餐馆菜单和计算机程序中的菜单看起来一点也不像但他们确实有很多共同点在餐馆中菜单列举了所有菜品和饮料在计算机程序中菜单通过图形界面展示了应用程序可用的命令和功能在用户界 已获原作者授权. 原系列地址: Python Tkinter 简介 一提到menu这个词, 很多人首先想到的是餐馆里的菜单. 虽然餐馆菜单和计算...

    joyqi 评论0 收藏0
  • [][Tkinter 教程02] Message 控件

    摘要:已获原作者授权原系列地址控件控件用来展示一些文字短消息和控件有些类似但在展示文字方面比要灵活比如控件可以改变字体而控件只能使用一种字体它提供了一个换行对象以使文字可以断为多行它可以支持文字的自动换行及对齐这里要澄清一下前面提到的控件可以改变 已获原作者授权. 原系列地址: Python Tkinter Message 控件 Message 控件用来展示一些文字短消息. Message...

    JowayYoung 评论0 收藏0
  • [][Tinkter 教程05] Radiobutton 控件

    摘要:已获原作者授权原系列地址单选按钮是一种可在多个预先定义的选项中选择出一项的控件单选按钮可显示文字或图片显示文字时只能使用预设字体该控件可以绑定一个函数或方法当单选按钮被选择时该函数或方法将被调用单选按钮这个名字来源于收音机上的调频按钮这些按 已获原作者授权. 原系列地址: Python Tkinter Radio Buttons 单选按钮是一种可在多个预先定义的选项中选择出一项的 T...

    shusen 评论0 收藏0
  • [][Tkinter 教程12] 布局管理 (Pack Place Grid)

    摘要:已获原作者授权原系列地址简介本文讲述如何使用的布局管理被称作或有三种布局管理方式注意这三种布局管理在同一个里一定不可以混用布局管理有以下功能将控件放置在屏幕上包括控件的位置及控件的大小将控件注册到本地窗口系统中管理控件在屏幕上的显示虽然控件 已获原作者授权. 原系列地址: Python Tkinter 简介: 本文讲述如何使用 tkinter 的布局管理 (被称作 layout ma...

    xorpay 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<