У меня есть объект на холсте, и я хочу его масштабировать. Когда я масштабирую его (+), он перемещается вниз вправо, но я хочу, чтобы холст двигался с помощью этого элемента с изменяющимся масштабированием (поймайте элемент в пользовательском представлении, и он станет якорем). Как я мог это сделать? Я нуждаюсь в этом, потому что, если у меня будут большие полотна, они будут прыгать на очень большие расстояния, и будет сложно найти их после масштабирования. Я сохраняю все элементы в словаре, если это помогает
PS. Используйте + - для масштабирования
from tkinter import *
main = Tk()
canvas_items = {}
frame = Frame(main)
frame.pack(expand=True, fill=BOTH)
canvas = Canvas(frame, bg='bisque')
# Create new item on the canvas
new_item = canvas.create_line(60, 60, 90, 90, activefill='purple')
# Add it to dict with all items
canvas_items[new_item] = [60, 60, 90, 90]
# for scale
plus_multiply_k = 1.02
minus_multiply_k = 0.98
# All functions
def scroll_start(event):
canvas.scan_mark(event.x, event.y)
def scroll_move(event):
canvas.scan_dragto(event.x, event.y, gain=1)
def scale_plus(event):
canvas.scale("all", 0, 0, plus_multiply_k, plus_multiply_k)
def scale_minus(event):
canvas.scale("all", 0,0,minus_multiply_k,minus_multiply_k)
def get_coords(event):
x = int(canvas.canvasx(event.x))
y = int(canvas.canvasy(event.y))
print(f'{x} . {y}')
# All binds
main.bind('<Key-plus>', scale_plus)
main.bind('<Key-minus>', scale_minus)
canvas.bind("<ButtonPress-1>", scroll_start)
canvas.bind("<ButtonPress-3>", get_coords)
canvas.bind("<B1-Motion>", scroll_move)
# Mainloop
canvas.pack(anchor='nw', expand=True, fill=BOTH)
main.mainloop()