Tk画板,使用Canvas控件制作

  • 0.0展示:
  • 0.1需要的控件:
  • 1 引入
  • 2 需要一个全局变量
  • 3 创建窗体
  • 4 控件
    • 4.1 询问颜色控件
    • 4.2 列表框和橡皮控件
    • 4.3 画布和清除所有按钮控件
    • 4.4 绑定画布绘制
  • 5 各个函数
    • 5.1 输入框选取颜色函数
    • 5.2 使用askcolor
    • 5.3 橡皮函数
    • 5.4 绘图
    • 5.5 清除所有
  • END 拿来代码试试吧

0.0展示:

0.1需要的控件:

直接白嫖代码看最后面

依然使用tkinter模块制作,你细细的品发现Tk能做的东西真多,绘图首先需要画布,这个东东就是动画,需要Canvas创建

1 引入

需要askcolor函数,所以进一步简化引入

from tkinter import *
from tkinter.colorchooser import *

2 需要一个全局变量

choosecolor = "black"  #画笔的颜色

3 创建窗体

基础框架搭建

tk = Tk()
tk.title("Canvas Paint 1.1.3")tk.mainloop()

4 控件

前三个好像都是废话,一句一句的讲没必要,直接上控件,七零八碎到最后看看得了

4.1 询问颜色控件

实现如下

先整一个框架存储这一行

cco = Frame(tk, relief=SUNKEN)
cco.pack(pady=5)

展示框:

tmplb1 = Label(cco, text="展示:") #临时文本
showLab = Label(cco, width=15, relief=GROOVE, bg="white") # 展示框初始化背景为白
tmplb1.pack(side=LEFT) #布局从左往右
showLab.pack(padx=10, side=LEFT) #布局从左往右

输入框,输入颜色名和十六进制:

tmplb2 = Label(cco, text="可输入[#十六进制]和[颜色名] : string") #临时文本
tmplb2.pack(side=LEFT)
getc = Entry(cco, width=30) #设置文本框
getc.pack(side=LEFT)

后面的两个按钮:

cokbtn = Button(cco, text="确认", command=sure)
getc.bind("<Return>", sure_fun)
cokbtn.pack(side=LEFT, ipadx=3, ipady=3)
askbtn = Button(cco, text="使用Ask", command=usingAsk)
askbtn.pack(side=RIGHT, ipadx=3, ipady=3)

command参数是点击按钮调用哪个函数,这些函数后面再讲

bind是绑定键位,在输入框中按下回车可以触发函数,如果报错,见Python专栏中的另一篇文章解决

4.2 列表框和橡皮控件


其中橡皮是一个按钮,初始化是没有边框的,按下出现边框,再次按下没有边框

定义optionmenu列表:

Omf = Frame(tk) #定义框架
Omf.pack() #布局框架
tmplb3 = Label(Omf, text="选择画笔宽度") #临时文本
tmplb3.pack(side=LEFT) #布局临时文本
sizevar = IntVar() #在列表上的内容
SizeList = [x for x in range(20, 90, 6)] #列表值,用列表存储
showoutput(SizeList) #临时函数,可删除
sizevar.set(SizeList[0]) #设置为第一项
ShowOption = OptionMenu(Omf, sizevar, *SizeList) #框架,表面值,列表值
ShowOption.pack(side=LEFT) #布局

橡皮按钮:

eraser = Button(Omf, text="橡皮", relief=FLAT, command=erase)
eraser.pack(side=LEFT, ipadx=20, padx=50)

relief=FLAT是无边框

4.3 画布和清除所有按钮控件

画布定义没什么难的

canvas = Canvas(tk, width=640, height=300)
#width是画布宽度,height是高
canvas.pack(expand=True, fill=BOTH) #可以填充

加入清除所有按钮

btn = Button(tk, text="清除所有", command=cls)
btn.pack(pady=5)

4.4 绑定画布绘制

如果鼠标按下且在画布上滑动,就触发绘图函数

canvas.bind("<B1-Motion>", paint)

5 各个函数

5.1 输入框选取颜色函数

def sure():global choosecolorchoosecolor = getc.get()showLab.config(bg=choosecolor)def sure_fun(self):sure()

将输入框的文本getc.get()读取,将全局变量赋值,再将展示框赋值,绑定的回车先调用sure_fun,再调用sure

5.2 使用askcolor

def usingAsk():global choosecolormyColor = askcolor()choosecolor = myColor[1]showLab.config(bg=choosecolor)getc.delete(0, END)getc.insert(0, myColor[1])

全局choosecolor,将askcolor函数返回的列表存入myColor,顺便说返回值是一个列表,你可以加一句print输出myColor,发现[0]是一个精确到小数好几位的RGB,[1]是十六进制码,所以我们需要[1]的值,更改展示框、输入框重新放入十六进制。

5.3 橡皮函数

def erase():global dercntglobal choosecolorglobal tmpcolorif dercnt == 0:eraser.config(relief=RAISED)tmpcolor = choosecolorchoosecolor = "#F0F0F0"dercnt += 1else:eraser.config(relief=FLAT)choosecolor = tmpcolordercnt -= 1

没什么技巧,用截屏软件发现界面的背景是#F0F0F0,所以触发橡皮就赋值颜色为#F0F0F0,有一个变量叫做dercnt,如果是0,就说明当前不是橡皮,更改边框,记录临时颜色,如果为1,说明当前是橡皮,更改边框,获取上一次的颜色

5.4 绘图

def paint(event):YourChooseSize = sizevar.get()x1, y1 = (event.x, event.y)x2, y2 = (event.x+YourChooseSize, event.y+YourChooseSize)canvas.create_oval(x1, y1, x2, y2, fill=choosecolor, outline=choosecolor)

获取你选中的画笔宽度,然后确定坐标,画圆,圆连起来不就是线嘛,单个的圆是这样的

5.5 清除所有

def cls():global choosecolorgetc.delete(0, END)showLab.config(bg="white")choosecolor = "black"canvas.delete("all")

画布delete所有,输入框清除所有,初始颜色变成黑色,展示框变成白色

END 拿来代码试试吧

所有代码,Github上也有,https://github.com/Github-Programer

建议命名为.pyw文件,是python的窗体文件,没有控制台

'''
@Author: Wyh
@Date: 2020-06-18 15:08:01
@LastEditTime: 2020-06-19 17:28:42
@LastEditors: Please set LastEditors
@Description: Canvas
@FilePath: \Coding-Notes\Python-Notes\图形界面开发学习笔记\PythonGUI设计tkinter菜鸟编程书\Canvas画板.pyw@Version:
@1.0.0: 基础构建绘图面板
@1.1.0: 加入颜色@1.1.1: 可设置十六进制颜色@1.1.2: 可设置RGB@1.1.3: 可设置颜色名
@1.2.0: 可设置画笔宽度
@1.3.0: 绘制图形
'''from tkinter import *
from tkinter.colorchooser import *dercnt = 0def showoutput(LS): #测试函数,可以不要,但是记得修改调用部分for i in LS:print(i)print(type(LS))print(type(LS[0]))def usingAsk():global choosecolormyColor = askcolor()choosecolor = myColor[1]showLab.config(bg=choosecolor)getc.delete(0, END)getc.insert(0, myColor[1])choosecolor = "black"def sure():global choosecolorchoosecolor = getc.get()showLab.config(bg=choosecolor)def sure_fun(self):sure()tmpcolor: strdef erase():global dercntglobal choosecolorglobal tmpcolorif dercnt == 0:eraser.config(relief=RAISED)tmpcolor = choosecolorchoosecolor = "#F0F0F0"dercnt += 1else:eraser.config(relief=FLAT)choosecolor = tmpcolordercnt -= 1def paint(event):YourChooseSize = sizevar.get()x1, y1 = (event.x, event.y)x2, y2 = (event.x+YourChooseSize, event.y+YourChooseSize)canvas.create_oval(x1, y1, x2, y2, fill=choosecolor, outline=choosecolor)def cls():global choosecolorgetc.delete(0, END)showLab.config(bg="white")choosecolor = "black"canvas.delete("all")tk = Tk()
tk.title("Canvas Paint 1.1.3")
lab = Label(tk, text="拖拽鼠标绘图,下面是更改画笔颜色")
lab.pack()# 询问颜色部分
cco = Frame(tk, relief=SUNKEN)
cco.pack(pady=5)
# 需要一个展示框,一个文本框
tmplb1 = Label(cco, text="展示:")
showLab = Label(cco, width=15, relief=GROOVE, bg="white")
tmplb1.pack(side=LEFT)
showLab.pack(padx=10, side=LEFT)
tmplb2 = Label(cco, text="可输入[#十六进制]和[颜色名] : string")
tmplb2.pack(side=LEFT)
getc = Entry(cco, width=30)
getc.pack(side=LEFT)
cokbtn = Button(cco, text="确认", command=sure)
getc.bind("<Return>", sure_fun)
cokbtn.pack(side=LEFT, ipadx=3, ipady=3)
askbtn = Button(cco, text="使用Ask", command=usingAsk)
askbtn.pack(side=RIGHT, ipadx=3, ipady=3)# optionMenu
Omf = Frame(tk)
Omf.pack()
tmplb3 = Label(Omf, text="选择画笔宽度")
tmplb3.pack(side=LEFT)
sizevar = IntVar()
SizeList = [x for x in range(20, 90, 6)]
showoutput(SizeList)
sizevar.set(SizeList[0])
ShowOption = OptionMenu(Omf, sizevar, *SizeList)
ShowOption.pack(side=LEFT)
eraser = Button(Omf, text="橡皮", relief=FLAT, command=erase)
eraser.pack(side=LEFT, ipadx=20, padx=50)canvas = Canvas(tk, width=640, height=300, relief=SUNKEN)
canvas.pack(expand=True, fill=BOTH)btn = Button(tk, text="清除所有", command=cls)
btn.pack(pady=5)canvas.bind("<B1-Motion>", paint)canvas.mainloop()

Python制作绘图板,基础功能实现相关推荐

  1. Qt中调用Python,实现基础功能、绘图、界面实现和图片爬虫

    Qt中调用Python,实现基础功能.绘图.界面实现和图片爬虫

  2. Python制作一个多功能音乐播放器

    文章目录 一.制作播放器的思路 二.制作播放器知识点和所需模块 三.播放器的代码展示 一.制作播放器的思路 制作一个多功能音乐播放器的思路 确定播放器的需求和功能,例如支持哪些音频格式.播放列表管理. ...

  3. python制作手机通讯录功能

    模拟手机通讯录功能 个人练习,仅供参考 print('-' * 20) print('欢迎使用通讯录:\n1.添加联系人\n2.查看通讯录\n3.删除联系人\n4.修改联系人信息\n5.查找联系人\n ...

  4. python自动推送消息_使用Python制作自动推送微信消息提醒的备忘录功能

    日常工作生活中,事情一多,就会忘记一些该做未做的事情.即使有时候把事情记录在了小本本上或者手机.电脑端备忘录上,也总会有查看不及时,导致错过的尴尬.如果有一款小工具,可以及时提醒,而不用再主动去查备忘 ...

  5. Python制作基础学生信息管理系统

    本文详细讲解了Python制作基础学生信息管理系统的实现,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧.编程资料领取 目录 一.前言 二.开发环境: 三.涉及知 ...

  6. python PIL(pillow) Image模块的基础功能

    引用文章: python之PIL模块基础功能 https://www.cnblogs.com/watertaro/p/9074453.html

  7. 小哥哥你有98K吗?利用Python制作一款多功能变声器!

    前言 好吧,关于这句小哥哥你有98K吗?出自别人口中经常说的玩笑话,我也略懂一些游戏嘛.不过不常玩,废话不多说,开始咱们今天的教程,非常简单! 利用Python制作一款多功能变声器! 咱们首先登陆百度 ...

  8. python表情换头_使用Python制作表情包实现换脸功能

    "表情包"是现在非常流行的交流方式,通过一张图片就能把文字不能表达或不便于表达的情感给表示出来,表情包一经诞生,就统治了中国人的社交圈,尤其是年轻人,他们的社交方式是所谓" ...

  9. 用zrender制作一个基础的绘图板,绘图板可用于组态界面的基础性开发

    zrender制作一个基础的绘图板,绘图板可用于组态界面的基础性开发,本实基于vue基础开发,可用于vue项目组态界面的参考. zrender开发文档地址:https://ecomfe.github. ...

  10. python制作表情包教程_使用Python制作表情包实现换脸功能

    "表情包"是现在非常流行的交流方式,通过一张图片就能把文字不能表达或不便于表达的情感给表示出来,表情包一经诞生,就统治了中国人的社交圈,尤其是年轻人,他们的社交方式是所谓" ...

最新文章

  1. 时间周期 java_周期和持续时间 / Period and Duration
  2. 从拼多多分享文案中,我们学会了什么?
  3. 【绝迹篇】C#RSA算法实现
  4. 台虚拟机更改计算机名,检查虚拟机的硬件信息、更改虚拟机名称、查看虚拟机配...
  5. 女孩子们,你的专业由你做主
  6. 试hp服务器不识别网卡一则
  7. python抓取网站乱码_如何使用Python抓取网站
  8. NBU7.5升级至8.1.2(在不考虑授权的情况)
  9. python将学号与成绩匹配_用Python运维网络(1):基础知识
  10. Spring Cloud Sleuth + Zipkin + RabbitMQ 监控微服务应用(二)
  11. Python matplotlib 线图(plt.plot())
  12. 阿里巴巴开源语音识别声学建模技术
  13. python3 asyncio 不阻塞_Python3 asyncio异步框架,让我崩溃的点
  14. Git Windows下安装配置
  15. pandas小记:pandas高级功能
  16. wincc7.5官网下载及安装配置(适配window10超详细教程)
  17. 统计学基础知识梳理(一)
  18. jQuery WeUI 组件下拉刷新和滚动加载的实现(复制就可以使用)
  19. iconfont图标本地使用
  20. Redhat rpm常用命令以及如何配置yum软件仓库使用yum install

热门文章

  1. Linux常用命令-2
  2. adb push php,ADB指令合集-ADB指令如何执行刷Recovery,重启进Recovery,双Wipe和刷ROM手机刷机...
  3. 弧度制和角度制的换算
  4. Zabbix监控系统系列之九:监控网络设备指定接口流量
  5. 《算法导论》 第28章 矩阵运算
  6. Scala中的基本类型 与操作符
  7. 网页视频下载:怎么批量下载网页上的视频
  8. F12下载网页视频(开放网页)
  9. Exponential family: 指数分布族
  10. PCB板沉金工艺和喷锡工艺区别