`
cakin24
  • 浏览: 1390201 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

tkinter实现简单画图

阅读更多

一 代码

import tkinter
from PIL import Image
app = tkinter.Tk()
app.title('My Paint----by cakin24')
app['width'] = 800
app['height'] = 600
#控制是否允许画图的变量,1:允许,0:不允许
yesno = tkinter.IntVar(value=0)
#控制画图类型的变量,1:曲线,2:直线,3:矩形,4:文本,5:橡皮
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)
#鼠标左键单击,允许画图
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, text=text)
canvas.bind('<Button-1>', onLeftButtonDown)
#记录最后绘制图形的id
lastDraw = 0
#按住鼠标左键移动,画图
def onLeftButtonMove(event):
    global lastDraw
    if yesno.get()==0:
        return
    if what.get()==1:
        #使用当前选择的前景色绘制曲线
        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:
        #绘制直线,先删除刚刚画过的直线,再画一条新的直线
        #global lastDraw
        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:
        #绘制矩形,先删除刚刚画过的矩形,再画一个新的矩形
        #global lastDraw
        try:
            canvas.delete(lastDraw)
        except Exception as e:
            pass
        lastDraw = canvas.create_rectangle(X.get(), Y.get(), event.x, event.y,
                                           fill=backColor, outline=foreColor)
    elif what.get()==5:
        #橡皮,使用背景色填充10*10的矩形区域
        canvas.create_rectangle(event.x-5, event.y-5, event.x+5, event.y+5,
                                outline=backColor, fill=backColor)
canvas.bind('<B1-Motion>', onLeftButtonMove)
#鼠标左键抬起,不允许画图
def onLeftButtonUp(event):
    if what.get()==2:
        #绘制直线
        canvas.create_line(X.get(), Y.get(), event.x, event.y, fill=foreColor)
    elif what.get()==3:
        #绘制矩形
        canvas.create_rectangle(X.get(), Y.get(), event.x, event.y,
                                fill=backColor, outline=foreColor)
    yesno.set(0)
    global lastDraw
    lastDraw = 0
canvas.bind('<ButtonRelease-1>', onLeftButtonUp)
#创建菜单
menu = tkinter.Menu(app, tearoff=0)
#打开图像文件
def Open():
    filename = tkinter.filedialog.askopenfilename(title='Open Image',
                                                  filetypes=[('image', '*.jpg *.png *.gif')])
    if filename:
        global image
        image = tkinter.PhotoImage(file=filename)
        canvas.create_image(80, 80, image=image)
menu.add_command(label='Open', command=Open)
#添加菜单,清除
def Clear():
    for item in canvas.find_all():
        canvas.delete(item)
menu.add_command(label='Clear', command=Clear)
#添加分割线
menu.add_separator()
#创建子菜单,用来选择绘图类型
menuType = tkinter.Menu(menu, tearoff=0)
def drawCurve():
    what.set(1)
    print(what.get())
menuType.add_command(label='Curve', command=drawCurve)
def drawLine():
    what.set(2)
menuType.add_command(label='Line', command=drawLine)
def drawRectangle():
    what.set(3)
menuType.add_command(label='Rectangle', command=drawRectangle)
def drawText():
    global text
    text = tkinter.simpledialog.askstring(title='Input what you want to draw',
                                          prompt='')
    what.set(4)
menuType.add_command(label='Text', command=drawText)
menuType.add_separator()
#选择前景色
def chooseForeColor():
    global foreColor
    foreColor = tkinter.colorchooser.askcolor()[1]
menuType.add_command(label='Choose Foreground Color', command=chooseForeColor)
#选择背景色
def chooseBackColor():
    global backColor
    backColor = tkinter.colorchooser.askcolor()[1]
menuType.add_command(label='Choose Background Color', command=chooseBackColor)
#橡皮
def onErase():
    what.set(5)
menuType.add_command(label='Erase', command=onErase)
menu.add_cascade(label='Type', menu=menuType)
#鼠标右键抬起,弹出菜单
def onRightButtonUp(event):
    menu.post(event.x_root, event.y_root)
canvas.bind('<ButtonRelease-3>', onRightButtonUp)
canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES)
app.mainloop()

 

二 运行结果


 
  • 大小: 4.9 KB
1
1
分享到:
评论

相关推荐

    python通过tkinter实现画图小程序

    在这里,我们将使用 Tkinter 实现一个简单的画图小程序。这个小程序允许用户绘制各种图形,例如线条、矩形、椭圆、文本等。用户可以选择不同的绘制工具和颜色,并且可以保存绘制的图形。 Tkinter 的主要组件包括: ...

    python3-tkinter官方文档

    Tkinter支持显示和处理简单的图像,如`.gif`和`.pbm`格式,通过`PhotoImage`类实现。 7. **模块`ttk`(Themed Tk)**: ttk模块提供了风格化的控件,使得Tkinter的外观更符合现代桌面环境,如Windows Aero或macOS...

    画图板集合保存图像

    在本文中,作者可能分享了如何利用特定的编程语言(如Python的Tkinter库,Java的Swing或AWT,或者是C#的Windows Forms等)创建一个简易的画图板应用,并实现保存用户在画板上绘制的图像的功能。 首先,我们需要理解...

    简易聊天程序(而且可以画图)

    这个项目是一个简易的聊天程序,它不仅支持基本的文字交流,还具有画图功能,使得用户可以在聊天过程中进行简单的图像创作和分享。这样的设计使得通信更具趣味性和互动性,类似于知名的即时通讯软件QQ。 在聊天程序...

    一个简易的画图板代码

    在这个简易画图板中,GUI可能包括一个画布区域,用户可以在此处绘制,以及工具栏,提供不同的画笔、橡皮擦、颜色选择等功能。 2. **事件处理**:当用户在画图板上进行操作时,比如点击鼠标或移动鼠标,程序需要捕获...

    python实现画图工具

    简易画图工具(Python),供大家参考,具体内容如下 小黑最近在努力的入门python,正好学习到了Python的tkinker模块下的Canvas(画布)和Button(按钮)再加上相应的事务管理,实现了一个简单的画图小工具。 程序代码 #...

    实现画图及图元之间的距离计算

    1. **图形库**:例如,Python中的matplotlib用于科学可视化,tkinter则更适合简单的GUI应用;JavaFX提供了丰富的图形功能;C#的WPF提供了强大的绘图和布局管理;JavaScript的HTML5 Canvas是网页上进行动态画图的好...

    画图功能的基本实现程序

    在IT领域,"画图功能的基本实现程序"通常是指创建一个简单图形用户界面(GUI)应用程序,让用户能够绘制基础形状,如矩形、椭圆和直线。这些功能在教育、设计、原型制作等多个场景中都有广泛应用。下面我们将深入...

    一个简单的画图程序,可以画线、直线、矩形、多边形、圆、椭圆、并可以这些选中后的图形进行移动,扩大,缩小,删除等操作

    该画图程序是一个基本的图形用户界面应用,旨在提供一种简单的方式来绘制和编辑几何形状。以下是一些关于这个程序及其功能的关键知识点: 1. **基本图形绘制**:程序支持画线、直线、矩形、多边形、圆和椭圆等基本...

    画图程序仿WINDOWS画图

    Windows画图程序是我们日常生活中常见的一款简单图像编辑工具,其简洁的操作界面和基础的绘图功能深受用户喜爱。特别是它的放大与缩小功能,让我们在处理图像时能够更加细致地观察每一个细节。本文将深入探讨如何...

    ua_tcl怎么画图_使用TCL/TK编写图形画图界面_

    在TCL/TK中画图主要通过`create`命令实现,例如,我们可以画一条线: ```tcl .canvas create line 50 50 200 200 -fill "blue" ``` 这将在画布上从(50, 50)到(200, 200)的位置绘制一条蓝色的线。 对于更复杂的...

    Python版画图程序源码.zip

    该程序可能使用了Python的标准库如Tkinter或者第三方库如matplotlib来实现画图功能。 Tkinter是Python的默认GUI库,提供了一种简单易用的方式来创建交互式的图形界面。在源码中,我们可能会看到如何创建窗口、添加...

    tkpaint,TK编写的画图程序

    Tkinter的使用不仅限于画图,还可以构建各种类型的桌面应用程序,如计算器、文件浏览器、简单的游戏等。通过tkpaint,开发者可以深入理解Tkinter的基本原理,以及如何利用Canvas组件来实现复杂的图形用户界面。这个...

    很好用的简单的画图软件源码

    标题 "很好用的简单的画图软件源码" 暗示了这是一个关于开发简单图形绘制应用的编程项目。描述中提到的功能包括画圆、画线和画矩形,这些都是基本的几何图形绘制操作,通常在计算机图形学或基础绘图应用中会遇到。这...

    llk.rar_画图板

    标题中的"llk.rar_画图板"表明这是一个与画图相关的软件或程序,很可能是一个简易版的图形编辑工具,用户可以通过它进行简单的绘画创作。这个名称中的".rar"是常见的压缩文件格式,意味着里面包含了该画图板的源代码...

    画图板代码(一)

    在本项目中,我们探索的是一个简易的"画图板代码"实现,它允许用户绘制直线、矩形和椭圆。这个基础的图形界面应用程序旨在提供一个简单的平台,让用户能够进行基本的图形创作。我们将深入讨论这个画图板的核心功能和...

    使用Python编写简单的画图板程序的示例教程

    ### 使用Python与Pygame开发简易画图板程序 #### 一、引言 在现代编程教育中,Python因其简洁易懂的语法而受到广泛欢迎。本文将详细介绍如何使用Python及Pygame库创建一个简易画图板程序。Pygame是Python的一个...

Global site tag (gtag.js) - Google Analytics