Python simple GUI (dibujo de simulación)

import os
import tkinter
import tkinter.simpledialog
import tkinter.colorchooser
import tkinter.filedialog
from PIL import Image
from PIL import ImageGrab

def openItem():
    global img
    filename=tkinter.filedialog.askopenfilename(title="Open",filetypes=[('Image','*.png *.gif')])
    if filename:
        img=tkinter.PhotoImage(file=filename)
        canvas.create_image(400,300,image=img)
        
def saveItem():
    
    saveX=int(root.winfo_rootx())
    saveY=int(root.winfo_rooty())
    saveW=root.winfo_width()
    saveH=root.winfo_height()
    im=ImageGrab.grab((saveX,saveY,saveX+saveW,saveY+saveH))      
    filename=tkinter.filedialog.asksaveasfilename(title='Save',filetypes=[('Image','*.png *.gif')])
    if not filename:
        return
    try:
        if filename[filename.index('.'):] in ['.png','.gif']==False:
            filename+='.png'
    except:
        filename+='.png'
    im.save(filename)

def clearItem():
    for i in canvas.find_all():
        canvas.delete(i)
        
def curveType():   
    penType.set(1)

def lineType():
    penType.set(2)

def rectangleType():
    penType.set(3)
    
def textType():
    global userText
    userText=tkinter.simpledialog.askstring(title="Please input your words", prompt='')
    penType.set(4)
    
def eraseType():
    penType.set(5)

def chooseForeColor():
    global foreColor    
    foreColor=tkinter.colorchooser.askcolor()[1]

def chooseBackColor():
    global backColor
    backColor=tkinter.colorchooser.askcolor()[1]

def onClickLeft(event):
    global userText
    canDraw.set(1)
    X.set(event.x)
    Y.set(event.y)
    if penType.get()==4:
        canvas.create_text(event.x,event.y,text=userText)
        
def onMoveLeft(event):
    global lastPaint,foreColor,backColor
    if canDraw.get()==0:
        return
    if penType.get()==1:        #绘制曲线
        canvas.create_line(X.get(),Y.get(),event.x,event.y,fill=foreColor)
        X.set(event.x)
        Y.set(event.y)
    elif penType.get()==2:      #绘制直线(预览)
        try:
            canvas.delete(lastPaint)
        except:
            pass
        lastPaint=canvas.create_line(X.get(),Y.get(),event.x,event.y,fill=foreColor)
    elif penType.get()==3:      #绘制矩形(预览)
        try:
            canvas.delete(lastPaint)
        except:
            pass
        lastPaint=canvas.create_rectangle(X.get(),Y.get(),event.x,event.y,fill=backColor,outline=foreColor)
    elif penType.get()==5:      #橡皮擦
        canvas.create_rectangle(event.x-5,event.y-5,event.x+5,event.y+5,fill=backColor,outline=backColor)

def onReleaseLeft(event):
    global lastPaint,foreColor,backColor
    lastPaint=0  
    if penType.get()==2:         #抬起左键画直线
        canvas.create_line(X.get(),Y.get(),event.x,event.y,fill=foreColor)
    elif penType.get()==3:      #抬起左键就画矩形
        canvas.create_rectangle(X.get(),Y.get(),event.x,event.y,fill=backColor,outline=foreColor)
    canDraw.set(0)
    
def onReleaseRight(event):
    menu.post(event.x_root, event.y_root)

root=tkinter.Tk()
root.title("Paint")
root.geometry("800x600+280+50")

lastPaint=0
userText=""
foreColor='black'
backColor='white'
X=tkinter.IntVar(value=0)
Y=tkinter.IntVar(value=0)
canDraw=tkinter.IntVar(value=0)     #能否画图,1:能,0:不能
penType=tkinter.IntVar(value=1)     #画笔类型,1:曲线,2:直线,3:矩形,4:文本,5:橡皮擦

menu=tkinter.Menu(root,tearoff=0)
subMenu=tkinter.Menu(menu,tearoff=0)

img=tkinter.PhotoImage()
canvas=tkinter.Canvas(root,bg='white',width=800,height=600)
canvas.create_image(800,600,image=img)

menu.add_command(label='Open',command=openItem)
menu.add_command(label='Save as',command=saveItem)
menu.add_separator()
subMenu.add_command(label='Curve',command=curveType)
subMenu.add_command(label='Line',command=lineType)
subMenu.add_command(label='Rectangle',command=rectangleType)
subMenu.add_command(label='Text',command=textType)
subMenu.add_command(label='Erase',command=eraseType)
menu.add_cascade(label='Pen Type',menu=subMenu)
menu.add_separator()
menu.add_command(label='Foreground Color',command=chooseForeColor)
menu.add_command(label='Bakckground Color',command=chooseBackColor)
menu.add_separator()
menu.add_command(label='Clear',command=clearItem)

canvas.bind('<Button-1>', onClickLeft)
canvas.bind('<B1-Motion>',onMoveLeft)
canvas.bind('<ButtonRelease-1>',onReleaseLeft)
canvas.bind('<ButtonRelease-3>',onReleaseRight)
canvas.pack(fill=tkinter.BOTH,expand=tkinter.YES)

root.mainloop()

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_43873198/article/details/107358189
Recomendado
Clasificación