边看边写,记录了一些笔记,关于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()