UnryMF
UnryMF

Reputation: 13

Canvas not getting captured while saving tkinter python

[SOLVED] Please don't judge the code. I just need to fix one bug with capturing canvas into file. As you can see I've tried multiple solutions and still while saving file is all-white...

Do you have any soulutions to that?

This app is to generate randomly dots on canvas with option to save it. it works when number of dots is above 40000 and rectangle is black. But otherwise is white.

enter image description here

HEIGTH = 207
WIDTH = 207




def snapsaveCanvas():
    fname = filename.get()
    my_window.update_idletasks()
    my_window.update()
    canvas.update()
    canvas.update_idletasks()
    ps = canvas.postscript(colormode='color')
    img = Image.open(io.BytesIO(ps.encode('utf-8')))
    img.save(fname + ".bmp", 'bmp')
    print("done")





canvas = tk.Canvas(frame2, width=HEIGTH, height=WIDTH, background='white')
canvas.grid(row=0, column=0)
canvas.create_rectangle(4, 4, 206, 206)

Upvotes: 0

Views: 195

Answers (1)

UnryMF
UnryMF

Reputation: 13

Ok, thanks for links.

I've tested several methods and one of them works. taken from How can I convert canvas content to an image?

import win32gui

def snapsaveCanvas():
    fileName = filename.get()
    canvas.update()
    canvas.update_idletasks()

    HWND = canvas.winfo_id()  # get the handle of the canvas
    rect = win32gui.GetWindowRect(HWND)  # get the coordinate of the canvas
    im = ImageGrab.grab(rect).save(fileName + ".bmp")
    print("done")

Upvotes: 1

Related Questions