[Python] Moving Images from one canvas to another canvas(es) one by one or randomly without...

Discussão em 'Python' iniciado por Stack, Fevereiro 10, 2025.

  1. Stack

    Stack Membro Participativo

    Recently I decided to write an application which let user can load bunch of images in a vertical canvas and select desire layout(3x3,2x3,5x2,...) for printing and send each image to blank room of layout and after editing the image quality send the layout to a printer. I could mange to load images in a vertical canvas and send each image to another canvas (not a layout). But I could only send images to another canvas just 2 times and for the third times despite I select an image but it didn't send to another canvas and I feel it hanged for the third times. Here is my script:

    import os
    from tkinter import *
    from PIL import Image, ImageTk


    os.system("cls||clear")

    def on_click_Canvas1(event):
    global image_id,selected_item,start_x,start_y
    selected_item = canvas1.find_closest(event.x, event.y)[0]
    start_x, start_y = event.x, event.y

    def on_click_Canvas2(event):
    global image_id,selected_item,start_x,start_y
    if selected_item:
    x, y = event.x, event.y
    img_tk = image_ids.pop(selected_item, None)

    new_id = canvas2.create_image(x, y, image=img_tk)
    image_ids[new_id] = img_tk
    selected_item = None


    def on_mousewheel(event):
    canvas1.yview_scroll(int(-1*(event.delta/120)), "units")

    root = Tk()

    canvas1 = Canvas(root, width=100, height=200, bg="lightblue")
    canvas2 = Canvas(root, width=300, height=200, bg="light pink")
    canvas1.pack(side=RIGHT,expand=True,fill=BOTH)
    canvas2.pack(side=LEFT,expand=True,fill=BOTH)

    selected_item = None
    start_x = 0
    start_y = 0

    image_list = ["E:\images_1\image1.jpg",
    "E:\images_1\image2.jpg",
    "E:\images_1\image3.jpg",
    "E:\images_1\image4.jpg",
    "E:\images_1\image5.jpg",
    "E:\images_1\image6.jpg"]

    i = 0
    n= 100
    image_append = []
    image_ids = {}

    for image in image_list:
    image1 = Image.open(image).resize((n, n))
    tk_image = ImageTk.PhotoImage(image1)
    image_id = canvas1.create_image(100, n*1.1*i, image=tk_image)
    image_append.append(tk_image)
    image_ids[image_id] = tk_image
    i += 1

    vsb = Scrollbar(canvas1, orient=VERTICAL,command=canvas1.yview)
    vsb.pack(side=RIGHT, fill=Y)
    canvas1.config(yscrollcommand=vsb.set, scrollregion=canvas1.bbox(ALL))

    # Bind mouse events for dragging
    canvas1.bind("<ButtonPress-1>", on_click_Canvas1)
    canvas2.bind("<ButtonPress-1>", on_click_Canvas2)

    canvas1.bind_all("<MouseWheel>", on_mousewheel)

    root.geometry('500x680')
    root.mainloop()


    I would appreciate if help to let me know the problem issue and remedy as well. Thank you in advance

    Continue reading...

Compartilhe esta Página