已獲原做者受權. 原系列地址: 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