python画板

class Application(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.createWidget()
        self.x = 0
        self.y = 0
        self.lastDraw = 0 #最后绘制的图形id
        self.startDrawFlag = False
        self.fgcolor = "red"
                
    def createWidget(self):
        #创建绘图区
        self.drawPad = Canvas(root, width=900, height=500, bg="black")
        self.drawPad.pack()
        
        #画图软件的各种按钮
        btn_pen = Button(self, text="画笔", name="pen")
        btn_pen.pack(side="left", padx="10")
        btn_rect = Button(self, text="矩形", name="rect")
        btn_rect.pack(side="left", padx="10")
        btn_clear = Button(self, text="清屏", name="clear")
        btn_clear.pack(side="left", padx="10")
        btn_erasor = Button(self, text="橡皮擦", name="erasor")
        btn_erasor.pack(side="left", padx="10")
        btn_line = Button(self, text="直线", name="line")
        btn_line.pack(side="left", padx="10")
        btn_lineArrow = Button(self, text="箭头直线", name="lineArrow")
        btn_lineArrow.pack(side="left", padx="10")
        btn_color = Button(self, text="颜色", name="color")
        btn_color.pack(side="left", padx="10")
        
        #为所有button绑定事件
        btn_pen.bind_class("Button", "<1>", self.eventManage)
        self.drawPad.bind("<ButtonRelease-1>", self.stopDraw)
    
    
    def stopDraw(self, event):
        self.startDrawFlag = False
        self.lastDraw = 0
          
    def startDraw(self, event):
        self.drawPad.delete(self.lastDraw)
        if not self.startDrawFlag:
            self.startDrawFlag = True
            self.x = event.x
            self.y = event.y
    
    def eventManage(self, event):
        name = event.widget.winfo_name()
        print(name)
        if name == "line":
            self.drawPad.bind("<B1-Motion>", self.myline)
        elif name == "lineArrow":
            self.drawPad.bind("<B1-Motion>", self.mylineArrow)
        elif name == "rect":
            self.drawPad.bind("<B1-Motion>", self.myRect)
        elif name == "pen":
            self.drawPad.bind("<B1-Motion>", self.myPen)
        elif name == "erasor":
            self.drawPad.bind("<B1-Motion>", self.myErasor)
        elif name == "clear":
            self.drawPad.delete("all")
        elif name == "color":
            c = askcolor(color=self.fgcolor, title="选择画笔颜色")
            self.fgcolor = c[1]
            
    def myline(self, event):
        self.startDraw(event)     
        self.lastDraw = self.drawPad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
        
    def mylineArrow(self, event):
        self.startDraw(event)        
        self.lastDraw = self.drawPad.create_line(self.x, self.y, event.x, event.y, arrow=LAST, fill=self.fgcolor)
        
    def myRect(self, event):
        self.startDraw(event) 
        self.lastDraw = self.drawPad.create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor)
    
    def myPen(self, event):
        self.startDraw(event)     
        self.drawPad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
        self.x = event.x
        self.y = event.y
        
    def myErasor(self, event):
        self.startDraw(event) 
        self.drawPad.create_rectangle(event.x-3, event.y-3, event.x+3, event.y+3, fill="black")
        self.x = event.x
        self.y = event.y
         
if __name__ == '__main__':
    root = Tk()
    root.geometry("900x500+200+200")
    root.title("画图软件") 
    app = Application(master=root)
    root.mainloop()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值