[譯][Tkinter 教程01] 入門: Label 控件

已獲原做者受權. 原系列地址: Python Tkinter

Hello Tkinter Label

下面咱們將以 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 既能夠顯示文字, 也能夠顯示圖片. 下面的例子中咱們將建立兩個 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
相關文章
相關標籤/搜索