清屏&颜色框
1 from tkinter import * 2 from tkinter.colorchooser import * 3 4 win_width = 900 5 win_height = 500 6 7 8 class Application(Frame): 9 10 def __init__(self, master=None, bgcolor='#000000'): 11 super().__init__(master) 12 self.master = master 13 self.bgcolor = bgcolor 14 self.pack() 15 self.x = 0 16 self.y = 0 17 self.startDrawFlag = False 18 self.lastDraw = 0 19 self.fgcolor = '#ff0000' 20 self.createWidget() 21 22 def createWidget(self): 23 # 创建绘图区 24 self.drawpad = Canvas(root, width=win_width, height=win_height*0.9, bg=self.bgcolor) 25 self.drawpad.pack() 26 27 btn_start = Button(root, text='开始', name='start') 28 btn_start.pack(side='left', padx='10') 29 btn_pen = Button(root, text='画笔', name='pen') 30 btn_pen.pack(side='left', padx='10') 31 btn_rect = Button(root, text='矩形', name='rect') 32 btn_rect.pack(side='left', padx='10') 33 btn_clear = Button(root, text='清屏', name='clear') 34 btn_clear.pack(side='left', padx='10') 35 btn_earser = Button(root, text='橡皮擦', name='eraser') 36 btn_earser.pack(side='left', padx='10') 37 btn_line = Button(root, text='直线', name='line') 38 btn_line.pack(side='left', padx='10') 39 btn_lineArrow = Button(root, text='箭头', name='lineArrow') 40 btn_lineArrow.pack(side='left', padx='10') 41 btn_color = Button(root, text='颜色', name='color') 42 btn_color.pack(side='left', padx='10') 43 44 btn_pen.bind_class('Button', '<1>', self.eventManager) 45 self.drawpad.bind('<ButtonRelease-1>', self.stopDraw) 46 root.bind('<KeyPress-r>', self.kuaijiejian) 47 root.bind('<KeyPress-g>', self.kuaijiejian) 48 root.bind('<KeyPress-y>', self.kuaijiejian) 49 50 51 def eventManager(self, event): 52 name = event.widget.winfo_name() 53 print(name) 54 if name == 'line': 55 self.drawpad.bind('<B1-Motion>', self.myline) 56 elif name == 'lineArrow': 57 self.drawpad.bind('<B1-Motion>', self.mylineArrow) 58 elif name == 'rect': 59 self.drawpad.bind('<B1-Motion>', self.myRect) 60 elif name == 'pen': 61 self.drawpad.bind('<B1-Motion>', self.myPen) 62 elif name == 'eraser': 63 self.drawpad.bind('<B1-Motion>', self.myEraser) 64 elif name == 'clear': 65 self.drawpad.delete('all') 66 elif name == 'color': 67 c = askcolor(color=self.fgcolor, title='选择画笔颜色') 68 self.fgcolor = c[1] 69 70 71 def stopDraw(self, event): 72 self.startDrawFlag = False 73 self.lastDraw = 0 74 75 def startDraw(self, event): 76 self.drawpad.delete(self.lastDraw) 77 if not self.startDrawFlag: 78 self.startDrawFlag = True 79 self.x = event.x 80 self.y = event.y 81 82 def myline(self, event): 83 self.startDraw(event) 84 self.lastDraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor) 85 86 def mylineArrow(self, event): 87 self.startDraw(event) 88 self.lastDraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, arrow = LAST, fill=self.fgcolor) 89 90 def myRect(self, event): 91 self.startDraw(event) 92 self.lastDraw = self.drawpad.create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor) 93 94 def myPen(self, event): 95 self.startDraw(event) 96 self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor) 97 self.x = event.x 98 self.y = event.y 99 100 def myEraser(self, event): 101 self.startDraw(event) 102 self.drawpad.create_rectangle(event.x-5, event.y-5, event.x+5, event.y+5, fill=self.bgcolor) 103 104 def kuaijiejian(self, event): 105 if event.char == 'r': 106 self.fgcolor = '#ff0000' 107 elif event.char == 'g': 108 self.fgcolor = '#00ff00' 109 elif event.char == 'y': 110 self.fgcolor = '#ffff00' 111 112 113 114 115 if __name__ == '__main__': 116 root = Tk() 117 root.geometry(str(win_width)+'x'+str(win_height)+'+100+100') 118 root.title('绘图') 119 app = Application(master=root) 120 root.mainloop()