"""小小画笔"""

from tkinter import *
from tkinter.filedialog import *
from tkinter.colorchooser import * height_root = 450
width_root = 900
class Application(Frame):
def __init__(self, master=None,bgcolors="#000000"):
super().__init__(master) # super()代表的是父类的定义,而不是父类对象
self.master = master
self.bgcolors = bgcolors
self.pack()
self.createWidget()
self.x = 0
self.y = 0
self.fgcolor = "#ff0000"
self.lastdrawLine = 0
self.drawFlag = FALSE
def createWidget(self):
#创建画图区域
self.drawPad = Canvas(root, width=width_root, height=height_root*0.9, bg=self.bgcolors)
self.drawPad.pack() #创建按钮
btn_start = Button(text="开始", name="start")
btn_start.pack(side="left",padx=10)
btn_pen = Button(text="画笔", name="pen")
btn_pen.pack(side="left", padx=10)
btn_rect = Button(text="矩形", name="rect")
btn_rect.pack(side="left", padx=10)
btn_clear = Button(text="清屏", name="clear")
btn_clear.pack(side="left", padx=10)
btn_earsor = Button(text="橡皮差", name="earsor")
btn_earsor.pack(side="left", padx=10)
btn_line = Button(text="直线", name="line")
btn_line.pack(side="left", padx=10)
btn_lineArrow = Button(text="箭头直线", name="lineArrow")
btn_lineArrow.pack(side="left", padx=10)
btn_color = Button(text="颜色", name="color")
btn_color.pack(side="left", padx=10) btn_pen.bind_class("Button", "<1>", self.eventManager)
self.drawPad.bind("<ButtonRelease-1>", self.drawFlagRelease) def eventManager(self,event):
name = event.widget.winfo_name()
if name == "line":
self.drawPad.bind("<B1-Motion>", self.myline)
elif name == "lineArrow":
self.drawPad.bind("<B1-Motion>", self.mylineArrow)
elif name == "rect":
self.drawPad.bind("<B1-Motion>", self.myrect)
elif name == "pen":
self.drawPad.bind("<B1-Motion>", self.mypen)
elif name == "earsor":
self.drawPad.bind("<B1-Motion>", self.myearsor)
elif name == "clear":
self.drawPad.delete("all")
elif name == "color":
colorpen = askcolor(color="red", title="请选择画笔颜色")
self.fgcolor = colorpen[1] def drawFlagRelease(self,event):
self.drawFlag = FALSE
self.lastdrawLine = 0 def drawStartMove(self,event):
self.drawPad.delete(self.lastdrawLine)
if not self.drawFlag:
self.drawFlag = True
self.x = event.x
self.y = event.y def myline(self, event):
self.drawStartMove(event)
self.lastdrawLine = self.drawPad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor) def mypen(self, event):
self.drawStartMove(event)
self.drawPad.create_line(self.x, self.y, event.x, event.y, fill=self.fgcolor)
self.x = event.x
self.y = event.y def myearsor(self, event):
self.drawStartMove(event)
self.drawPad.create_rectangle(event.x-4, event.y-4, event.x+4, event.y+4, fill=self.bgcolors) def mylineArrow(self,event):
self.drawStartMove(event)
self.lastdrawLine = self.drawPad.create_line(self.x, self.y, event.x,event.y, arrow=LAST, fill=self.fgcolor) def myrect(self, event):
self.drawStartMove(event)
self.lastdrawLine = self.drawPad.create_rectangle(self.x, self.y, event.x, event.y, outline=self.fgcolor) if __name__ == '__main__':
root = Tk()
root.geometry(str(width_root)+"x"+str(height_root)+"+200+300")
root.title("党京伟的一个画笔软件")
app = Application(master=root)
root.mainloop()

十二、GUI设计-画图程序的更多相关文章

  1. 20155301第十二周java课程程序

    20155301第十二周java课程程序 内容一:在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 String类 charAt split Ar ...

  2. MySQL系列(十二)--如何设计一个关系型数据库(基本思路)

    设计一个关系型数据库,也就是设计RDBMS(Relational Database Management System),这个问题考验的是对RDBMS各个模块的划分, 以及对数据库结构的了解.只要讲述 ...

  3. 第十二章 设计用户界面 之 设计自适应的UI布局

    1. 概述 随着手机和平板设备的日益普及,使得开发者不得不考虑MVC网站在移动设备上的展示. 本章内容包括:运行在多种设备上的程序(屏幕分辨率,CSS,HTML).设计手机端Web程序. 2. 主要内 ...

  4. .net开发笔记(十二) 设计时与运行时的区别(续)

    上一篇博客详细讲到了设计时(DesignTime)和运行时(RunTime)的概念与区别,不过没有给出实际的Demo,今天整理了一下,做了一个例子,贴出来分享一下,巩固前一篇博客讲到的内容. 简单回顾 ...

  5. BizTalk 开发系列(四十二) 为BizTalk应用程序打包不同的环境Binding

    我们在使用微软或者其他公司提供的BizTalk应用程序MSI包的时候经常会有一个目标环境的选择选项.该选项可以在不同的环境下使用不同的绑定(BizTalk应用程序配置)感觉很高级. 其实这个非常的简单 ...

  6. BizTalk开发系列(十二) Schema设计之Group与Order

    开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档.因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构).虽 ...

  7. Java学习笔记(二十二):打包程序

    加入一个程序测试完毕,我们就可以将它打包,就可以放到服务器上运行了 找到左下角的终端 点击 输入命令: mvnw clean package -DskipTests=true clean:清除以前生成 ...

  8. ballerina 学习 三十二 编写安全的程序

      ballerina编译器已经集成了部分安全检测,在编译时可以帮助我们生成错误提示,同时ballerina 标准库 已经对于常见漏洞高发的地方做了很好的处理,当我们编写了有安全隐患的代码,编译器就已 ...

  9. OD 实验(十二) - 对一个 Delphi 程序的逆向

    程序: 运行程序 界面显示的是未注册 点击 Help -> About 点击 Use Reg Key 这里输入注册码 用 PEiD 看一下 该程序是用 Delphi 6.0 - 7.0 写的 逆 ...

随机推荐

  1. 016、Java中使用小数

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  2. mysql合并结果集

  3. NirSoft 实用程序

    64-bit (x64) utilities package 此软件包包含NirSoft中的所有实用程序,这些实用程序具有64位版本(x64)Windows的独立构建. 此程序包包含下面列表中每个实用 ...

  4. 自定义对象使用 ArrayList 进行增删改查(dos程序)

    马上要进行java基础考试了,闲着写一次博客,把这10周学的东西过一遍,可能没过全,.....但是我觉得增删改查是必须的,以前一直不会用ArrayList  自定义对象....... 案例如下:自己根 ...

  5. Java 用户输入

    章节 Java 基础 Java 简介 Java 环境搭建 Java 基本语法 Java 注释 Java 变量 Java 数据类型 Java 字符串 Java 类型转换 Java 运算符 Java 字符 ...

  6. P1046 划拳

    P1046 划拳 转跳点:

  7. 启用root关闭客人会话

    1.位root用户设置密码: sudo passwd root 2.修改配置文件/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf(先备份) 添加如下在文 ...

  8. 二十三、SAP中内表的修改

    一.通过MODIFY关键字来修改内表的内容,it相当于全部内容,wa相当于一条内容 二.效果如下

  9. 报错SQL盲注之BIGINT 溢出

    首先感谢原创博主,在此致敬.本文转自:http://www.cnblogs.com/lcamry/articles/5509112.html MySQL版本在 5.5.5 及其以上 0x01 概述 我 ...

  10. ACM-AK吧!少年

    题目描述:AK吧!少年 AK is an ACM competition finished all of the problems. AC This problem is one of the ste ...