1. 程式人生 > >Python的GUI程式設計(一)Label(標籤)

Python的GUI程式設計(一)Label(標籤)

常用Python GUI庫有:

1.Tkinter

2.WxPython

3.PyQT

4.pyGtk

5.Jython

6.MFC

7.PythonCard

8.Dabo

9.AnyGui

10.WPY

11.IronPython

詳細介紹參考:http://blog.csdn.net/mingzznet/article/details/9172585 其中Tkinter 模組(Tk 介面)是 Python 的標準 Tk GUI 工具包的介面 .Python 使用 Tkinter 可以快速的建立 GUI 應用程式。由於 Tkinter 是內建到 python 的安裝包中、只要安裝好 Python 之後就能 import Tkinter 庫、而且 IDLE 也是用 Tkinter 編寫而成、對於簡單的圖形介面 Tkinter 還是能應付自如。

Python2.x中的為TkinterPython3.x中的為tkinter

GUI程式設計前,先匯入:import Tkinter

Tkinter元件(即類)(15種)

Tkinter的提供各種控制元件,如按鈕,標籤和文字框,一個GUI應用程式中使用。這些控制元件通常被稱為控制元件或者部件。

參考:http://www.runoob.com/python/python-gui-tkinter.html

標準屬性(變數):

標準屬性也就是所有控制元件的共同屬性,如大小,字型和顏色等等。

Dimension、Color、Font、Anchor、Relief、Bitmap、Cursor(游標)

詳細說明參考:https://my.oschina.net/TyLucifer/blog/112961

幾何管理(方法或函式):

Tkinter控制元件有特定的幾何狀態管理方法,管理整個控制元件區域組織,一下是Tkinter公開的幾何管理類:包、網格、位置

pack()、grid()、place()

Label控制元件:Label 控制元件用以顯示文字和圖片. Label 通常被用來展示資訊, 而非與使用者互動. 

class Label(Widget):Label類繼承Widget類"""Label widget which can display text and bitmaps."""
       控制元件標籤能夠顯示文字和圖片
 類的初始化函式(建構函式)def __init__
(self, master=None, cnf={}, **kw):
第一個是self,即物件本身。
第二個是master,在Tkinter中,一個控制元件可能屬於另一個控制元件,這時另一個控制元件就是這個控制元件的master。預設一個視窗沒有master,因此master有None的預設值。
第三個cnf不瞭解
第四個是kw為命名關鍵字引數,
   """Construct a label widget with the parent MASTER.
        STANDARD OPTIONS:
標準選項(屬性)
activebackground, activeforeground, anchor,
background, bitmap, borderwidth, cursor,
disabledforeground, font, foreground,
highlightbackground, highlightcolor,
highlightthickness, image, justify,
padx, pady, relief, takefocus, text,
textvariable, underline, wraplength
  WIDGET-SPECIFIC OPTIONS            height, state, width        """
呼叫BaseWidget中的初始化函式
Widget.__init__(self, master, 'label', cnf, kw)
class Widget(BaseWidget, Pack, Place, Grid):Widget類繼承BaseWidget, Pack, Place, Grid類"""Internal class.
    Base class for a widget which can be positioned with the geometry managers
    Pack, Place or Grid."""
小部件的基類,它可以定位於幾何管理器。包、位置或網格。
   pass
1、背景自定義

背景,有三部分構成:內容區+填充區+邊框

  <1>內容區引數有:width,length用於指定區域大小,如果顯示前景內容是文字,則以單個字元大小為單位;如果顯示的是影象,則以畫素為單位。預設值是根據具體顯示的內容動態調整。型別是int。

                  background用於指定背景的顏色,預設值根據系統而定。

  <2>填充區引數:指的是內容區和邊框之間的間隔大小,單位是畫素。引數有:padx , pady,型別是int。

  <3>邊框引數:樣式relief(可選值為:flat(預設),sunken,raised,groove,ridge),borderwidth(邊框的寬度,單位是畫素,預設根據系統而定,一般是1或2畫素)

                             highlightbackground,highlightcolor,highlightthickness 三個邊框引數僅在Label允許接收焦點的情況下(tackfocus=True),用於設定焦點獲取前後高亮邊框顏色以及高亮邊框寬度。

2、前景自定義

  前景定義分為文字內容影象兩小塊來說明。

2.1文字

  文字內容選項有:<1>指定字型和字型大小,如:font = (font_name,size),預設有系統指定。

                               <2>文字對齊方式justify = "center(預設)left/right/"

                               <3>指定文字(或影象)顏色foreground = "指定的顏色",可以是英文名字,也可以是RGB格式的

                               <4>指定文字內容:(靜態的)text = "目標字串.....";  (動態更新的)textvariable = str_obj,當str_obg的內容改變時,會更新Label中對應內容。

                                      這裡需要注意的是str_obj必須是TKinter所支援的字串型別變數,如:str_obj = Tkinter.StringVar()      str_obj.set("目標文字內容")

                               <5>單個字元新增下劃線underline = index, index是目標字串中的字元索引值。

                               <6>文字或影象在背景內容區的位置:anchor  可選值為(n,s,w,e,ne,nw,sw,se,center)eswn是東南西北英文的首字母

2.2影象

影象內容選項有:<1>指定圖片:bitmap = bitmap_image,當指定image選項的時候,這個引數會被忽略掉     或者  image = normal_image(僅支援GIF, PPM/PGM格式的圖片)" 。

                                       需要注意的是這裡的所用到的圖片物件bitmap_image  normal_image都是需要經過TKinter轉換後的影象格式。

                                       如: bitmap_image = TKinter.BitmapImage(file = "點陣圖片路徑")

                                              normal_image = TKinter.PhotoImage(file = "gif 、ppm/pgm圖片路徑")

  圖片和文字取捨:compound引數可以控制要顯示的文字和影象。當同時指明瞭要顯示的文字和影象時,可以通過該引數來進行不同設定。

                               可選值:None 預設值,表示只顯示影象,不顯示文字;bottom/top/left/right,表示圖片顯示在文字的下/上/左/右;center,表示文字顯示在圖片中心上方。

 3、Label的其他引數

  <1>activebacakground  activeforground   用於設定Label處於活動(active)狀態下的背景和前景顏色,預設由系統指定。

  <2>diableforground  指定當Label不可用的狀態(Disable)下的前景顏色,預設由系統指定。

  <3>cursor 指定滑鼠經過Label的時候,滑鼠的樣式,預設由系統指定。

  <4>state  指定Label的狀態,用於控制Label如何顯示。可選值有:normal(預設)/active/disable。

參考:http://www.cnblogs.com/zyq-blog/p/5712926.html
屬性用法:

fg(foreground):前景色
bg(background)
:背景色
設定背景色的一個大的用處是:可以判斷控制元件的大小(不同的控制元件使用不同的顏色。

width:寬度一個漢字約為2個單位
height
:高度    與預設的漢字高度約一致
指文字所在區域,文字預設區域居中

from Tkinter import *
root=Tk()
Lab1=Label(root,bg='red',text='床前明月光').pack()
Lab2=Label(root,bg='Green',text='疑是地上霜').pack()
Lab3=Label(root,bg='Yellow',text='舉頭望明月').pack()
Lab11=Label(root,bg='red',text='床前明月光',width=16,height=6).pack()
Lab22=Label(root,bg='Green',text='疑是地上霜',width=18,height=8).pack()
Lab33=Label(root,bg='Yellow',text='舉頭望明月',width=12,height=12).pack()
root.mainloop()

compound:指定文字(text)與影象(bitmap/image)是如何在Label上顯示,預設為None,當指定image/bitmap時,文字(text)將被覆蓋,只顯示影象了。

  left:    影象居左
    right:影象居右
    top
:    影象居上
    bottom:影象居下
center:文字覆蓋在影象上
bitmap/image:顯示在Label上的影象
text:顯示在Label上的文字

from Tkinter import *

#建立介面視窗
Win=Tk()
#只能顯示GIF格式的圖片
img=PhotoImage(file="D:/temp/1.gif")
#Label是個類,對其初始化
# #pack屬性將空間載入到視窗上
#文字內容顯示視窗
lab1=Label(Win,text="Hello World!",fg='red',image=img,bg='green',compound='right').pack()
lab2=Label(Win,text="Hello World!",fg='black',image=img,bg='red',compound='left').pack()
lab3=Label(Win,text="Hello World!",fg='red',image=img,bg='blue',compound='center').pack()
# 啟動 Tkinter 的訊息迴圈 (event loop)
Win.mainloop()

wraplength    指定多少單位後開始換行(經測試預設字型情況下,一個漢字或中文標點的長度大約wraplength=12單位,一個英文字元(字母,標點等)佔6~9個單位,不清楚為什麼沒有規律)根據文字中的字元佔位,設定wraplength個單位後,字元換行
justify:指定多行的對齊方式,必須是 left, right, or center
ahchor
        指定文字(text)或影象(bitmap/image)在Label中的顯示位置(方位)
可用的值:
e、w、n、s、ne、se、sw、sn、center
佈局如下圖:類似空間平面中的8個方位

                nw(左上)        n (中上)      ne(右上)
                w  (左中)   center(中間)   e(右中)
                sw(左下)        s (中下)      se(右下)

from Tkinter import *

root=Tk()
#每行顯示一句:每句5個漢字加一箇中文標點符號(英文為6)warplength=5*12+12
Lab1=Label(root,bg='red',text='床前明月光,疑是地上霜,舉頭望明月,低頭思故鄉。',width=24,height=4,wraplength=72,justify='left').pack()
#height與預設的漢字高度約一致,一個漢字約為2個單位的width
Lab2=Label(root,bg='Green',text='疑是地上霜',width=18,height=5,wraplength=12,anchor='nw').pack()
Lab3=Label(root,bg='Yellow',text='舉頭望明月',width=18,height=2,anchor='ne',justify='right').pack()
root.mainloop()

justifyanchor區別了:一個用於控制多行的對齊;另一個用於控制整個文字塊在Label中的位置

邊界框的使用。
from Tkinter import *
root=Tk()
img=PhotoImage(file='D:/temp/1.gif')
Lab1=Label(root,
           bg='blue',
           text='床前明月光,疑是地上霜,舉頭望明月,低頭思故鄉。',
           fg='purple',
           relief="groove",
           # 中心框主要是顯示視窗內容(文字、圖片)
           width=360,
           height=360,
           wraplength=72,
           justify='left',
           anchor = "s",
           # padx/pady次邊框(內容邊界加寬)
           padx=10,
           pady=10,
           # 外層框與視窗連線的(邊界修飾)
           borderwidth=20,
           #影象顯示在底部
           image=img,
           compound='bottom').pack()
root.mainloop()

使用PhotoImage和BitmapImage顯示bmp或gif檔案
示例:
from Tkinter import *
#建立介面視窗
Win=Tk()
#只能顯示GIF格式的圖片
img=PhotoImage(file="D:/temp/1.gif")
#Label是個類,對其初始化
# #pack方法將空間載入到視窗上
#圖片顯示在視窗左邊
lab1=Label(Win,image=img).pack(side='left')
#文字內容顯示視窗右邊,字型顏色為紅色
lab2=Label(Win,text="Hello World!",font=6,fg='red',padx=100,pady=100).pack(side='right')
# 啟動 Tkinter 的訊息迴圈 (event loop)
Win.mainloop()

Label視窗部件上呼叫了pack方法,它告訴Label視窗部件去調整自己的尺寸來適應所給定文字的大小,並且使用自己可見。

mainloop()方法作用:將一直處在事件迴圈之中,直到我們關閉了這個視窗。事件迴圈不僅僅處理來自使用者的事件(如滑鼠敲擊和按鍵按下)或者視窗系統(重繪事件和視窗配置消 息),它也處理來自Tkinter自身的工作等待佇列,這些工作之一就包括由pack方法所產生的工作和顯示更新。這就意味著這個應用程式視窗在進入這個 事件迴圈之前將不會顯示出來。

Pack:pack幾何管理器通過在一個幀中把視窗部件包裝到一個父部件中來建立一個版面。為了對視窗部件使用這個幾何管理器,我們在這個視窗部件上使用pack方法。