使用事件处理创建一个简单的绘图实例程序 python

来源:互联网 发布:vgg19网络结构图 编辑:程序博客网 时间:2024/05/17 03:24
import Tkinterclass mybutton:#定义按钮类def __init__(self,root,canvas1,label1,type):#类初始化canvas1,label1是MyCanvals,mylabel的实例,因此可以使用类中的方法self.root=root#保存引用值self.canvas1=canvas1self.label1=label1if type==0:#根据类型创建按钮button=Tkinter.Button(root,text='huaxian',command=self.DrawLine)elif type==1:button=Tkinter.Button(root,text='huashanxing',command=self.DrawArc)elif type==2:button=Tkinter.Button(root,text='huajuxing',command=self.DrawRec)else:button=Tkinter.Button(root,text='huatuoyuan',command=self.DrawOval)button.pack(side='left')def DrawLine(self):#DrawLine按钮事件处理函数self.label1.text.set('Draw Line')self.canvas1.SetStatus(0)#把status赋值,便于根据status的值进行画图def DrawArc(self):self.label1.text.set('Draw Arc')self.canvas1.SetStatus(1)def DrawRec(self):self.label1.text.set('Draw Rectangle')self.canvas1.SetStatus(2)def DrawOval(self):self.label1.text.set('Draw Oval')self.canvas1.SetStatus(3)class MyCanvals:def __init__(self,root):self.status=0self.draw=0self.root=rootself.canvas=Tkinter.Canvas(root,bg='red',width=600,height=480)#生成canvas组件self.canvas.pack()self.canvas.bind('<ButtonRelease-1>',self.Draw)#绑定事件到左键self.canvas.bind('<Button-2>',self.Exit)#绑定事件到中键self.canvas.bind('<Button-3>',self.Del)#绑定事件到右键self.canvas.bind_all('<Delete>',self.Del)#绑定事件到delete键self.canvas.bind_all('<KeyPress-d>',self.Del)#绑定事件到d键self.canvas.bind_all('<KeyPress-e>',self.Exit)#绑定事件到e键def Draw(self,event):#绘图事件处理函数if self.draw==0:#判断是否绘图,先记录起始位置self.x=event.xself.y=event.yself.draw=1else:#根据self.status绘制不同的图形if self.status==0:self.canvas.create_line(self.x,self.y,event.x,event.y)self.draw=0elif self.status==1:self.canvas.create_arc(self.x,self.y,event.x,event.y)self.draw=0elif self.status==2:self.canvas.create_rectangle(self.x,self.y,event.x,event.y)self.draw=0else:self.canvas.create_oval(self.x,self.y,event.x,event.y)self.draw=0def Del(self,event):#按下右键或者d键删除图形items=self.canvas.find_all()for i in items:self.canvas.delete(i)def Exit(self,event):#按下中键或者e键退出self.root.quit()def SetStatus(self,status):#设置绘制的图形self.status=statusclass mylabel:#定义标签类def __init__(self,root):self.root=rootself.canvas1=canvas1self.text=Tkinter.StringVar()#生成标签引用变量self.text.set('Draw Line')self.label=Tkinter.Label(root,textvariable=self.text,fg='blue',width=50)#生成标签self.label.pack(side='left')root=Tkinter.Tk()#生成主窗口canvas1=MyCanvals(root)#生成实例label1=mylabel(root)#生成实例mybutton(root,canvas1,label1,0)mybutton(root,canvas1,label1,1)mybutton(root,canvas1,label1,2)mybutton(root,canvas1,label1,3)root.mainloop()#进入消息循环

在窗口中单击鼠标左键,然后移到另一个位置,再单击左键将绘制图形,可以单机按钮选择要绘制的图形。单击右键或d键可以删除多余的图形,单击鼠标中键或e键将关闭窗口


阅读全文
0 0
原创粉丝点击