使用事件处理创建一个简单的绘图实例程序 python
2017-07-18 18:13
1096 查看
import Tkinter class mybutton:#定义按钮类 def __init__(self,root,canvas1,label1,type):#类初始化canvas1,label1是MyCanvals,mylabel的实例,因此可以使用类中的方法 self.root=root#保存引用值 self.canvas1=canvas1 self.label1=label1 if 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=0 self.draw=0 self.root=root self.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.x self.y=event.y self.draw=1 else:#根据self.status绘制不同的图形 if self.status==0: self.canvas.create_line(self.x,self.y,event.x,event.y) self.draw=0 elif self.status==1: self.canvas.create_arc(self.x,self.y,event.x,event.y) self.draw=0 elif self.status==2: self.canvas.create_rectangle(self.x,self.y,event.x,event.y) self.draw=0 else: self.canvas.create_oval(self.x,self.y,event.x,event.y) self.draw=0 def 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=status class mylabel:#定义标签类 def __init__(self,root): self.root=root self.canvas1=canvas1 self.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键将关闭窗口
相关文章推荐
- Linux下,使用C/C++一个简单的消息处理程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 使用JBOSS, Eclipse创建一个EJB3实例程序的过程
- 利用反射获得委托和事件以及创建委托实例和添加事件处理程序
- Linux下,使用C/C++编写一个简单的消息处理程序
- 使用 timer 来创建一个简单的报警程序
- 一个简单的python程序实例(通讯录)
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之一
- 如何使用Python为Hadoop编写一个简单的MapReduce程序(这个人T字还有好几篇精华的可以看)
- 一个简单的事件处理程序
- 如何使用Python为Hadoop编写一个简单的MapReduce程序
- 使用timer控件创建一个简单的报警程序
- 【Java】使用JFrame监听事件创建一个复制文本功能的窗体程序与按钮快捷键
- 一个简单的python程序实例(通讯录)
- 实战 HTTP 处理程序(HTTP Handler) (1) -- 创建一个最简单的 HTTP Handler
- 使用xcode创建一个简单得hello world 程序。
- 实战 HTTP 处理程序(HTTP Handler) (1) -- 创建一个最简单的 HTTP Handler
- 《Applications=Code+Markup》读书札记(2)——创建一个简单的 WPF 程序的代码结构及关于 Window 实例位置设置问题
- Python中使用Tkinter模块创建GUI程序实例
- 不使用ATL向导,创建一个简单的ATL对话框程序.