邊看邊寫,記錄了一些筆記,關於GUI中事件的總結在程序的開端註釋中,程序部分實現的是撲克牌的出牌效果。
#所有組件均有一個bind方法將事件綁定起來。
#widget.bind(event,handler)
#如果相關事件發生,handler函數會被觸發,事件對象event會傳遞給handler函數。
#handler函數是自己定義的
#主要的事件如下:
# <Button-1> 鼠標按鍵,1代表左鍵,2 代表中鍵,3代表右鍵
# <B1-Motion>按住鼠標左鍵移動
# <Double-Button-1>雙擊左鍵
# <KeyPress-a>按下a鍵,a可用其他鍵代替,如<KeyPress-b>掉膘按下b鍵。
#事件對象的屬性有很多,如:widget表示引起事件的組件,width,height組件改變後的大小,僅Configure有效
# type是所觸發的事件類型,keysym按鍵名稱,只對鍵盤事件有效。
#
#多種事件就綁定的機制:
# 組件對象的綁定:
# 1.通過command屬性綁定(適合簡單不需獲取event對象)如:Button(root,text="submit",command = login)
# 2.通過bind()方法綁定,適合獲取event對象,如:c1 = Canvas();c1.bind("<Button-1>",drawLine)
#
# 組件類的綁定
# 調用對象的bind_class函數,將該組件類所有的組件綁定事件。如:w.bind_class("Widget","event",eventhandler)
# 如下方給所有Label增加事件的語句:self.pukes[0].bind_class("Label","<Button-1>",self.chupai)
#
from tkinter import *
class Application(Frame):
def __init__(self,master = None):
super().__init__(master)
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
'''
加入一張圖片的過程
self.photo = PhotoImage(file = "imgs/puke/2.png")
self.puke1 = Label(self.master,image = self.photo)
self.puke1.place(x = 10,y = 50)
'''
self.photos = [PhotoImage(file = "imgs/puke/"+str(i)+".png") for i in range(2,14)]
self.pukes = [Label(self.master,image = self.photos[i]) for i in range(12)]
for i in range(12):
self.pukes[i].place(x = 10+ i*40,y = 50)
#給所有Label增加事件
self.pukes[0].bind_class("Label","<Button-1>",self.chupai)
def chupai(self,event):
print(event.widget.winfo_geometry())#打印座標信息和長寬
print(event.widget.winfo_y())
#通過設置其y軸的位置座標來達到出牌的效果。
if event.widget.winfo_y() == 50:
event.widget.place(y=30)
else:
event.widget.place(y=50)
if __name__ == "__main__":
root = Tk()
root.geometry("630x300+200+300")
app = Application(master = root)
root.mainloop()