【day3】python/代码复用的研究。

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='直线',command=self.DrawLine)
		elif type==1:
			button=tkinter.Button(root,text='扇形',command=self.DrawArc)
		elif type==2:
			button=tkinter.Button(root,text='矩形',command=self.DrawRec)
		else:
			button=tkinter.Button(root,text='椭圆',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='white',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()#进入消息循环


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值