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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值