weixin_43265327 2021-09-10 11:18 采纳率: 57.1%
浏览 37
已结题

写的一段代码,不能实现连续画图的功能。代码如下,点击‘画图’按钮后,在画布上点击,可以画出一个图,但如果继续点击的话,上一个图消失,不能画出多个。特别郁闷,请给看看如何解决


from tkinter.filedialog import *
from PIL import Image,ImageTk,ImageDraw

root=Tk()
root.geometry('1200x600')
root.title('自定义标号标图系统')
root.iconbitmap('2.ico')
frame=Frame(root)
frame.grid(row=0,column=0,rowspan=100)
hbar=Scrollbar(frame,orient=HORIZONTAL)
vbar=Scrollbar(frame,orient=VERTICAL)
cv=Canvas(frame,bg='khaki',width=1000,height=560,xscrollcommand=hbar.set, yscrollcommand=vbar.set,scrollregion=(0,0,1600,1200))
hbar.pack(side=BOTTOM,fill=X)
hbar.config(command=cv.xview)
vbar.pack(side=RIGHT,fill=Y)
vbar.config(command=cv.yview)
cv.pack(side=LEFT,expand=True,fill=BOTH)

def ditu():
    global draw,image1,img,mainImage
    image1 = Image.open("111.jpg")
    img = ImageTk.PhotoImage(image=image1)
    mainImage=cv.create_image(0,0,anchor=NW,image=img)
    draw = ImageDraw.Draw(image1)
    cv.itemconfig(mainImage,image=img)

def tu():
    cv.bind("<ButtonPress-1>", huatu)
num=1
def huatu(event):
    global  num,img
    tag = 'tu' + str(num)  # 标签
    the_t = Image.open("1.png")
    cv.img = ImageTk.PhotoImage(the_t)
    x, y = cv.canvasx(event.x), cv.canvasy(event.y)
    cv.create_image(x, y, anchor=NW, image=cv.img, tags=(tag,))
    num += 1
    print(tag)

bt1=Button(root,text='画图',command=tu)
bt1.grid(row=0,column=2,padx=5)

bt2=Button(root,text='底图',command=ditu)
bt2.grid(row=0,column=1,padx=5)

root.mainloop()
  • 写回答

2条回答 默认 最新

  • 於黾 2021-09-10 13:59
    关注
    cv.img = ImageTk.PhotoImage(the_t)
    

    这个初始化代码你要确定它只能执行一次,不要每画一个图你都先用默认的图给他覆盖了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月19日
  • 已采纳回答 9月11日
  • 创建了问题 9月10日

悬赏问题

  • ¥15 ansys fluent计算闪退
  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。