"""开发画图软件"""
import tkinter as tk
# 窗口的宽度和高度
win_width=900
win_height=450
class Application(tk.Frame):
def __init__(self, master = None):
super().__init__(master)
self.master = master
self.bgcolor = '#000000'
self.x = 0
self.y = 0
self.fgcolor = 'red'
self.startDrawFlag = False
self.lastDraw = 0
self.pack()
self.createWidget()
def createWidget(self):
# 创建绘图区
self.drawpad = tk.Canvas(self, width=win_width, height=win_height * 0.9, bg=self.bgcolor)
self.drawpad.pack()
# 创建按钮
btn_start = tk.Button(self, text='开始', width='10', name='start');btn_start.pack(side='left', padx='10', pady='5')
btn_pen = tk.Button(self, text='画笔', width='10', name='pen');btn_pen.pack(side='left', padx='10', pady='5')
btn_rect = tk.Button(self, text='矩形', width='10', name='rect');btn_rect.pack(side='left', padx='10', pady='5')
btn_clear = tk.Button(self, text='清屏', width='10', name='clear');btn_clear.pack(side='left', padx='10', pady='5')
btn_erasor = tk.Button(self, text='橡皮擦', width='10', name='erasor');btn_erasor.pack(side='left', padx='10', pady='5')
btn_line = tk.Button(self, text='直线', width='10', name='line');btn_line.pack(side='left', padx='10', pady='5')
btn_lineArrow = tk.Button(self, text='箭头直线', width='10', name='lineArrow');btn_lineArrow.pack(side='left', padx='10', pady='5')
btn_color = tk.Button(self, text='颜色', width='10', name='color');btn_color.pack(side='left', padx='10', pady='5')
# 事件处理
btn_pen.bind_class('Button','<1>', self.eventManager)
self.drawpad.bind('<ButtonRelease-1>', self.stopDraw)
def eventManager(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)
def stopDraw(self, event):
self.startDrawFlag = False
self.lastDraw = 0
def myline(self, event):
self.drawpad.delete(self.lastDraw)
if not self.startDrawFlag:
self.startDrawFlag = True
self.x = event.x
self.y = event.y
self.lastDraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
# def stopDraw(self, event):
# self.startDrawFlag = False
# self.lastDraw = 0
def mylineArrow(self, event):
self.drawpad.delete(self.lastDraw)
if not self.startDrawFlag:
self.startDrawFlag = True
self.x = event.x
self.y = event.y
self.lastDraw = self.drawpad.create_line(self.x, self.y, event.x, event.y, arrow=LAST, fill=self.fgcolor)
if __name__ == "__main__":
root = tk.Tk()
root.title('画画本')
root.geometry(str(win_width)+'x'+str(win_height))
app = Application(master = root)
root.mainloop()
,这里每一步我都是跟着视频照着打,运行错误