用户:
B站小铭铭查看:1 回复:2 评论:1 创建时间:2021-06-05T12:51:40
【作品展示】

【作品介绍】
就是一个画板只能切换颜色
可以修改代码调整笔的粗细
【作品源代码】
#Make a masterpiece: creates a paintable canvas. THIS VERSION ADDS COLOURS
import tkinter
print("长按鼠标左键画画")
print("点击颜色按钮切换颜色")
window = tkinter.Tk()
canvas = tkinter.Canvas(window, width=750, height=500, bg="white")
canvas.pack()
lastX, lastY = 0, 0
colour = "black"
def store_position(event):
global lastX, lastY
lastX = event.x
lastY = event.y
def on_click(event):
store_position(event)
def on_drag(event):
canvas.create_line(lastX, lastY, event.x, event.y, fill=colour, width=3)
#If you want to change the brush size, change the width number in the line above.
store_position(event)
canvas.bind("", on_click)
canvas.bind("", on_drag)
red_id = canvas.create_rectangle(10, 10, 30, 30, fill="red")
blue_id = canvas.create_rectangle(10, 35, 30, 55, fill="blue")
black_id = canvas.create_rectangle(10, 60, 30, 80, fill="black")
white_id = canvas.create_rectangle(10, 85, 30, 105, fill="white")
def set_colour_red(event):
global colour
colour = "red"
def set_colour_blue(event):
global colour
colour = "blue"
def set_colour_black(event):
global colour
colour = "black"
def set_colour_white(event):
global colour
colour = "white"
canvas.tag_bind(red_id, "", set_colour_red)
canvas.tag_bind(blue_id, "", set_colour_blue)
canvas.tag_bind(black_id, "", set_colour_black)
canvas.tag_bind(white_id, "", set_colour_white)
window.mainloop()
【提示】
部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:
https://python.codemao.cn
Python-happyyyyfrom PIL import Image from PIL import Image, ImageTk, ImageGrab import tkinter.colorchooser import tkinter.filedialog import time import tkinter.simpledialog import tkinter
def center_window(top, w, h): ws = app.winfo_screenwidth() hs = app.winfo_screenheight() app.geometry('%dx%d' % (w, h))
app = tkinter.Tk() app.title('我的画图') center_window(app, 800, 600) yesno = tkinter.IntVar(value=0) what = tkinter.IntVar(value=1) X = tkinter.IntVar(value=0) Y = tkinter.IntVar(value=0) foreColor = '#000000' backColor = '#FFFFFF' image = tkinter.PhotoImage() canvas = tkinter.Canvas(app, bg='white', width=800, height=600) canvas.create_image(800, 600, image=image) lastDraw = 0 end = [0] size = "20"
def getter(widget): time.sleep(0.5) x = app.winfo_x()+widget.winfo_x() y = app.winfo_y()+widget.winfo_y() if app.winfo_x() < 0: x = 0 if app.winfo_y() < 0: y = 0 x1 = x+widget.winfo_width()+200 y1 = y+widget.winfo_height()+200 filename = tkinter.filedialog.asksaveasfilename( filetypes=[('.jpg', 'JPG')], initialdir='C:\\Users\\lin042\\Desktop\\') ImageGrab.grab().crop((x, y, x1, y1)).save(filename)
def onLeftButtonDown(event): yesno.set(1) X.set(event.x) Y.set(event.y) if what.get() == 4: canvas.create_text(event.x, event.y, font=( "微软雅黑",int(size)), text=text, fill=foreColor) what.set(1)
def onLeftButtonMove(event): global lastDraw if yesno.get() == 0: return if what.get() == 1: lastDraw = canvas.create_line( X.get(), Y.get(), event.x, event.y, fill=foreColor) X.set(event.x) Y.set(event.y) elif what.get() == 2: try: canvas.delete(lastDraw) except Exception as e: pass lastDraw = canvas.create_line(X.get(), Y.get(), event.x, event.y, fill=foreColor) elif what.get() == 3: try: canvas.delete(lastDraw) except Exception as e: pass lastDraw = canvas.create_rectangle(X.get(), Y.get(), event.x, event.y, outline=foreColor) elif what.get() == 5: lastDraw = canvas.create_rectangle(event.x-25, event.y-25, event.x+25, event.y+25, outline=backColor) elif what.get() == 6: try: canvas.delete(lastDraw) except Exception as e: pass lastDraw = canvas.create_oval(X.get(), Y.get(), event.x, event.y, fill=backColor, outline=foreColor)
def onLeftButtonUp(event): global lastDraw if what.get() == 2: lastDraw = canvas.create_line( X.get(), Y.get(), event.x, event.y, fill=foreColor) elif what.get() == 3: lastDraw = canvas.create_rectangle( X.get(), Y.get(), event.x, event.y, outline=foreColor) elif what.get() == 6: lastDraw = canvas.create_oval( X.get(), Y.get(), event.x, event.y, outline=foreColor) yesno.set(0) end.append(lastDraw)
def onRightButtonUp(event): menu.post(event.x_root, event.y_root)
canvas.bind('<Button-1>', onLeftButtonDown) canvas.bind('<B1-Motion>', onLeftButtonMove) canvas.bind('<ButtonRelease-1>', onLeftButtonUp) canvas.bind('<ButtonRelease-3>', onRightButtonUp) canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES) menu = tkinter.Menu(app, tearoff=0)
def Open(): filename = tkinter.filedialog.askopenfilename(title='导入图片', filetypes=[('image', '*.jpg *.png *.gif')]) if filename: global image image = Image.open(filename) image = image.resize((800, 600), Image.ANTIALIAS) image = ImageTk.PhotoImage(image) canvas.create_image(400, 300, image=image)
menu.add_command(label='导入', command=Open)
def Clear(): global lastDraw, end for item in canvas.find_all(): canvas.delete(item) end = [0] lastDraw = 0
menu.add_command(label='清屏', command=Clear)
def Back(): global end try: for i inrange(end[-2], end[-1]+1): canvas.delete(i) end.pop() except: end = [0]
menu.add_command(label='撤销', command=Back)
def Save(): getter(canvas)
menu.add_command(label='保存', command=Save) menu.add_separator() menuType = tkinter.Menu(menu, tearoff=0)
def drawCurve(): what.set(1)
menuType.add_command(label='铅笔', command=drawCurve)
def drawLine(): what.set(2)
menuType.add_command(label='直线', command=drawLine)
def drawRectangle(): what.set(3)
menuType.add_command(label='矩形', command=drawRectangle)
def drawCircle(): what.set(6)
menuType.add_command(label='圆形', command=drawCircle)
def drawText(): global text, size text = tkinter.simpledialog.askstring(title='输入文本', prompt='') if text != None: size = tkinter.simpledialog.askinteger( '输入字号', prompt='', initialvalue=20) if size == None: size = "20" what.set(4)
menuType.add_command(label='文本', command=drawText) menuType.add_separator()
def chooseForeColor(): global foreColor foreColor = tkinter.colorchooser.askcolor()[1]
menuType.add_command(label='选择前景色', command=chooseForeColor)
def chooseBackColor(): global backColor backColor = tkinter.colorchooser.askcolor()[1]
menuType.add_command(label='选择背景色', command=chooseBackColor)
def onErase(): what.set(5)
menuType.add_command(label='橡皮擦', command=onErase) menu.add_cascade(label='工具栏', menu=menuType) app.mainloop()
点赞0
评论