本文轉載自:http://blog.csdn.net/jcodeer/article/details/1811298python
#Tkinter教程之Button篇(1)
#Button功能觸發事件
'''1.一個簡單的Button應用'''
from Tkinter import *
#定義Button的回調函數
def helloButton():
print 'hello button'
root = Tk()
#經過command屬性來指定Button的回調函數
Button(root,text = 'Hello Button',command = helloButton).pack()
root.mainloop()
'''
執行的結果:每次點擊一次,程序向標準輸出打印'hello button',以上爲Button使用方法,能夠
再作一下簡化,如不設置Button的回調函數,這樣也是容許的但這樣的結果與Label沒有什麼太
大的區別,只是外觀看起來有所不一樣罷了,失去了Button的做用。
from Tkinter import *
root = Tk()
#下面的relief = FLAT設置,就是一個Label了!!!
Button(root,text = 'hello button',relief=FLAT).pack()
root.mainloop()
'''
'''2.測試Button的relief屬性'''
#運行下面的代碼能夠看到Button的各個不一樣效果,均沒有回調函數。
from Tkinter import *
root = Tk()
#flat, groove, raised, ridge, solid, or sunken
Button(root,text = 'hello button',relief=FLAT).pack()
Button(root,text = 'hello button',relief=GROOVE).pack()
Button(root,text = 'hello button',relief=RAISED).pack()
Button(root,text = 'hello button',relief=RIDGE).pack()
Button(root,text = 'hello button',relief=SOLID).pack()
Button(root,text = 'hello button',relief=SUNKEN).pack()
root.mainloop()
'''
Button顯示圖像
image:能夠使用gif圖像,圖像的加載方法img = PhotoImage(root,file = filepath
bitmap:使用X11 格式的bitmap,Windows的Bitmap無法顯示的,在Windows下使用GIMP2.4將windows
Bitmap轉換爲xbm文件,依舊沒法使用.linux下的X11 bitmap編輯器生成的bitmap尚未測試,但可
以使用內置的位圖。
(1).使用位圖文件
bp = BitmapImage(file = "c:/python2.xbm")
Button(root,bitmap = bp).pack()
(2).使用位圖數據
BITMAP = """
#define im_width 32
#define im_height 32
static char im_bits[] = {
0xaf,0x6d,0xeb,0xd6,0x55,0xdb,0xb6,0x2f,
0xaf,0xaa,0x6a,0x6d,0x55,0x7b,0xd7,0x1b,
0xad,0xd6,0xb5,0xae,0xad,0x55,0x6f,0x05,
0xad,0xba,0xab,0xd6,0xaa,0xd5,0x5f,0x93,
0xad,0x76,0x7d,0x67,0x5a,0xd5,0xd7,0xa3,
0xad,0xbd,0xfe,0xea,0x5a,0xab,0x69,0xb3,
0xad,0x55,0xde,0xd8,0x2e,0x2b,0xb5,0x6a,
0x69,0x4b,0x3f,0xb4,0x9e,0x92,0xb5,0xed,
0xd5,0xca,0x9c,0xb4,0x5a,0xa1,0x2a,0x6d,
0xad,0x6c,0x5f,0xda,0x2c,0x91,0xbb,0xf6,
0xad,0xaa,0x96,0xaa,0x5a,0xca,0x9d,0xfe,
0x2c,0xa5,0x2a,0xd3,0x9a,0x8a,0x4f,0xfd,
0x2c,0x25,0x4a,0x6b,0x4d,0x45,0x9f,0xba,
0x1a,0xaa,0x7a,0xb5,0xaa,0x44,0x6b,0x5b,
0x1a,0x55,0xfd,0x5e,0x4e,0xa2,0x6b,0x59,
0x9a,0xa4,0xde,0x4a,0x4a,0xd2,0xf5,0xaa
};
"""
使用tuple數據來建立圖像
bmp = BitmapImage(data = BITMAP)
Button(root,bitmap = bmp)
'''
'''3.與Label同樣,Button也能夠同時顯示文本與圖像,使用屬性compound'''
from Tkinter import *
root = Tk()
#圖像居下,居上,居右,居左,文字位於圖像之上
Button(root,text = 'botton',compound = 'bottom',bitmap = 'error').pack()
Button(root,text = 'top',compound = 'top',bitmap = 'error').pack()
Button(root,text = 'right',compound = 'right',bitmap = 'error').pack()
Button(root,text = 'left',compound = 'left',bitmap = 'error').pack()
Button(root,text = 'center',compound = 'center',bitmap = 'error').pack()
#消息循環
root.mainloop()
'''4.控件焦點問題
建立三個Button,各自對應回調函數;將第二個Button設置焦點,程序運行是按「Enter」,判斷
程序的打印結果
'''
from Tkinter import *
def cb1():
print 'button1 clicked'
def cb2(event):
print 'button2 clicked'
def cb3():
print 'button3 clicked'
root = Tk()
b1 = Button(root,text = 'Button1',command = cb1)
b2 = Button(root,text = 'Button2')
b2.bind("<Return>",cb2)
b3 = Button(root,text = 'Button3',command = cb3)
b1.pack()
b2.pack()
b3.pack()
b2.focus_set()
root.mainloop()
'''
上例中使用了bind方法,它創建事件與回調函數(響應函數)之間的關係,每當產生<Enter>事件
後,程序便自動的調用cb2,與cb1,cb3不一樣的是,它自己還帶有一個參數----event,這個參數傳遞
響應事件的信息。
'''
from Tkinter import *
def printEventInfo(event):
print 'event.time = ' , event.time
print 'event.type = ' , event.type
print 'event.WidgetId = ', event.widget
print 'event.KeySymbol = ',event.keysym
root = Tk()
b = Button(root,text = 'Infomation')
b.bind("<Return>",printEventInfo)
b.pack()
b.focus_set()
root.mainloop()
'''
犯了個錯誤,將<Return>寫成<Enter>了,結果是:當鼠標進入Button區域後,事件printEventInfo
被調用。程序打印出了event的信息。
'''linux