网站首页 > 资源文章 正文
用Python tkinter写个画图板很简单,本文也主要不是啰嗦的介绍画图板的代码写法,重点是想分享一个各种课程都未讲到但却非常实用的知识点和规避一个遇到的坑。
一、 程序框架简介
这个程序相对简单,就不逐句展开代码,确实有需要的可以私信赠送。
程序总的框架如下:
from tkinter import *
class Myapp(Tk):
def __init__(self):
super().__init__()
self.title('万师兄')
self.geometry('450x300+100+100')
self.createWidget()
def createWidget(self):
pass
if __name__ == '__main__':
app = Application()
app.mainloop()
在createWidget函数下面直接创建各种button按钮和canvas画布,给相应的按钮绑定相应的画图函数,比如,给直线按钮绑定一个btn_draw_line函数,然后在btn_draw_line函数中给画布绑定一个鼠标左键拖动事件和draw_line函数,在draw_line函数中用canvas.create_line写出画直线的函数即可。balabala,其余照此类推即可。
二、 一个实用知识
几乎所有的Python tkinter课程都在教你控件怎么用,怎么布局,怎么绑定事件等等,在一个窗口上完成各种控件布置和基础功能实现之后就到此为止了,其肤浅程度令人发指。在写一个稍微大一点项目的时候,遇到多个窗口怎么办,比如我在画图板里加了一个设置按钮,弹出一个新的窗口,在新窗口中设置线宽、画笔颜色等。有多个窗口时窗口之间的数据又如何传递?比如我要将新建窗口中线宽的值传递到调用窗口,并成功设置画笔的粗细,该怎么办?没有课程告诉你答案。
我也是在网上研究了好久,终于偶遇一位大神,找到了个解决方案。方法也很简单,要么在调用窗口中取新建窗口的值,要么在新建窗口中直接设置调用窗口的值(不过需要将调用窗口的对象作为参数传递给新建窗口)。我简单介绍一下第一种方法,第二种方法留给感兴趣的人去研究。
先建立参数设置对象:
class Win_setup(Toplevel):
def __init__(self):
super().__init__()
self.title('设置画图参数')
self.canvasConfig = 0
self.createWidget()
def createWidget(self):
lineWidthFrame = Frame(self)
lineWidthFrame.pack()
label_lineWidth = Label(lineWidthFrame, text='线条粗细')
label_lineWidth.pack(side='left')
self.lineWidth = IntVar()
self.lineWidth.set(1)
self.line_spinBox = Spinbox(lineWidthFrame, from_=1, to=10, textvariable=self.lineWidth)
self.line_spinBox.pack(side='left')
self.btnok = Button(self, text='确定', command=self.returnSetup)
self.btnok.pack()
btnCancel = Button(self, text='取消', command=self.cancelSetup)
btnCancel.pack()
def returnSetup(self):
self.canvasConfig = self.lineWidth.get()
self.destroy()
def cancelSetup(self):
self.destroy()
在设置按钮里绑定一个函数,用来新建窗口,获取数据。代码很简单:
def btn_canvasSetup(self):
win_setup = Win_setup()
self.wait_window(win_setup)
self.lineWidth = win_setup.canvasConfig
self.wait_window(win_setup)这一句很关键,等待窗口销毁,没有这一句参数传不回来。
三、 一个坑
因为同一个界面中有很多功能相似的按钮,有位大神在给按钮绑定事件的时候用了bind_class方法,然后判断控件的名称再分别处理相应的事件。刚看到这种写法的时候,感觉惊为天人,高手果然是高手。可是当我点击设置按钮,新建窗口之后,发现新窗口里的按钮都没法用,研究了好久,发现问题出在bind_class上,新建窗口里的按钮名称不在bind_class之后处理事件的判断条件里。因此当有多个窗口时,不建议使用bind_class绑定事件,还是各个按钮绑定各自的。限于篇幅,我就不具体展开。
其实还有很多问题可以探索和研究,比如其他后台程序的数据如何实时传递给窗口?比如后台有个爬虫,如何将实时爬取的信息展示在窗口上?这些问题哪怕是进阶课程也没讲到,更别说讲透了,这个对于做项目却十分有用,感兴趣的朋友可以一起交流探讨。
我是万师兄,我自学python,致力于掌握和研究爬虫、机器视觉和人工智能三个方向,欢迎指正交流。
- 上一篇: 电脑运行命令
- 下一篇: Win10拿掉经典程序引群愤:微软终于收手
猜你喜欢
- 2025-05-14 Windows中CMD最全命令行
- 2025-05-14 《大力水手》长片重立项 由《精灵旅社》导演执掌
- 2025-05-14 windows常用命令集
- 2025-05-14 被雪藏的“记事本”,微软何时会更新?
- 2025-05-14 win10画图工具没了,告诉你在哪里找
- 2025-05-14 解甲归学 青春表率
- 2025-05-14 漂洋过海来的大师:steelseries 赛睿 老旗舰 SENSEI 鼠标 开箱简评
- 2025-05-14 换个姿势画画-新奇画图应用专题
- 2025-05-14 电脑CMD命令大全-学会让别人刮目相看
- 2025-05-14 77岁爷爷用起Excel来简直“丧心病狂”,这图比我拿笔画强一万倍
你 发表评论:
欢迎- 05-1430个在线地图瓦片URL分享
- 05-1425个在线地图瓦片URL分享
- 05-14PixelStyle for Mac(mac照片编辑器)
- 05-14一篇文章带你了解CSS3 3D 转换知识
- 05-14我们的世界是假的?马斯克:我们生活在高文明模拟的矩阵游戏中
- 05-14【视觉AI的基石】斯坦福大学笔记!带你吃透卷积神经网络 (CNN)
- 05-14潮流 | 通过AAPE的新价目,无虑入荷未来主义服饰
- 05-14身份证查询服务API:准确识别身份证信息
- 最近发表
- 标签列表
-
- 电脑显示器花屏 (79)
- 403 forbidden (65)
- linux怎么查看系统版本 (54)
- 补码运算 (63)
- 缓存服务器 (61)
- 定时重启 (59)
- plsql developer (73)
- 对话框打开时命令无法执行 (61)
- excel数据透视表 (72)
- oracle认证 (56)
- 网页不能复制 (84)
- photoshop外挂滤镜 (58)
- 网页无法复制粘贴 (55)
- vmware workstation 7 1 3 (78)
- jdk 64位下载 (65)
- phpstudy 2013 (66)
- 卡通形象生成 (55)
- psd模板免费下载 (67)
- shift (58)
- localhost打不开 (58)
- 检测代理服务器设置 (55)
- frequency (66)
- indesign教程 (55)
- 运行命令大全 (61)
- ping exe (64)
本文暂时没有评论,来添加一个吧(●'◡'●)