上节课,我们使用Python中tkinter库制作了一个简易的画图板程序,基本实现了圆、椭圆、矩形、多边形、直线等图形的绘制功能。今天,我们为绘图菜单添加设置样式的功能。通过此文可以学习Python+tkinter自定义控件。
我们先看下今天要实现的功能。
点击样式设置后弹出界面
我们分下面三步对界面进行实现
【第一步】界面分析【第二步】界面实现【第三步】总结界面分析
为了实现界面整齐效果,我们使用grid布局。程序分别对椭圆、圆、圆弧、矩形、多边形、直线进行设置。界面弹出时,我们对先前的绘图样式进行加载(使用pickle序列化),样式属性包括边框颜色、边框宽度、边框样式(实线、虚线)和填充颜色。边框颜色和填充颜色设置我们使用colorchooser对象,为此,必须先进行导入(from tkinter import colorchooser),当点击颜色条(Label)时,弹出askcolor对话框。当点击【设置】按钮后,使用pickle序列化样式参数,保存到本地。点击【关闭】按钮后界面消失。如图所示
程序效果图
界面实现
本例主要难点有:
(一)分别对六个图形样式进行设置时,最好使用for循环来减少代码量(这就要求先期将每一行作为一个类定义好),类定义如下图所示
类的初始化代码(类的变量初始化)
(二)对于边框颜色、边框宽度、边框样式和填充颜色,这些属性,如果使用for循环时,如何保证样式参数不被最后一个图形样式覆盖,这就需要在类初始化中将这些样式参数先定义好。类的控件定义如下图所示
类的初始化(生成控件)
(三)如何随着参数变动,获取样式参数信息,代码如下图所示
类的初始化(获取样式参数)
(四)一行的类实现了,但是如何将这一行放置到界面中,我们需要定义另一个PaintFont类。这个类初始化代码如下图
PaintFont类的实例变量初始化
PaintFont类控件创建
获取样式参数信息并测试
总结
程序虽然实现了上述功能,但是没有绑定到主界面的菜单响应事件中。下一步,我们将该PaintFont类绑定到主界面的响应事件中。感兴趣的朋友们欢迎留言讨论。
原创不易,转载请注明出处(百家号:Python高手养成)