GUI中事件的總結及小案例

邊看邊寫,記錄了一些筆記,關於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()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章