Python 将tkinter画布左上角移动到项目
画布上有一个对象,我想缩放它。当我缩放它(+)时,它会向下移动到右侧,但我希望画布随着这个移动的缩放项目(用户视图中的捕捉项目,它将是一个锚定)一起移动。我怎么能这么做?我需要这个,因为如果我有大的画布项目,它们会在很远的距离上跳跃,并且在缩放后很难找到它们。如果有帮助的话,我会把所有的条目都保存在字典里 PS.使用+-进行缩放Python 将tkinter画布左上角移动到项目,python,tkinter,Python,Tkinter,画布上有一个对象,我想缩放它。当我缩放它(+)时,它会向下移动到右侧,但我希望画布随着这个移动的缩放项目(用户视图中的捕捉项目,它将是一个锚定)一起移动。我怎么能这么做?我需要这个,因为如果我有大的画布项目,它们会在很远的距离上跳跃,并且在缩放后很难找到它们。如果有帮助的话,我会把所有的条目都保存在字典里 PS.使用+-进行缩放 from tkinter import * main = Tk() canvas_items = {} frame = Frame(main) frame.pack
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()
从tkinter导入*
main=Tk()
画布_项={}
帧=帧(主)
frame.pack(expand=True,fill=BOTH)
画布=画布(框架,bg='bisque')
#在画布上创建新项目
新建项目=画布。创建行(60,60,90,90,activefill='purple')
#将其与所有项目一起添加到dict
画布项目[新项目]=[60,60,90,90]
#比例尺
加乘=1.02
减乘=0.98
#所有功能
def scroll_启动(事件):
canvas.scan_标记(event.x,event.y)
def scroll_移动(事件):
canvas.scan_dragto(事件x,事件y,增益=1)
def scale_plus(事件):
缩放(“全部”,0,0,加乘,加乘)
def scale_减(事件):
缩放(“全部”,0,0,减乘,减乘)
def get_coords(事件):
x=int(canvas.canvasx(event.x))
y=int(canvas.canvasy(event.y))
打印(f'{x}.{y}')
#全部绑定
主绑定(“”,缩放加)
main.bind(“”,比例_减号)
canvas.bind(“,滚动\u开始)
canvas.bind(“,get_坐标)
canvas.bind(“,滚动\移动)
#主回路
canvas.pack(anchor='nw',expand=True,fill=BOTH)
main.mainloop()
“我希望画布与…捕捉项目…成为锚定一起移动”:这是矛盾的,如果移动画布,项目也会移动。我猜您希望项目保持在相同的coords
?@stovfl是的,当我缩放地图时,谷歌地图中的类似物“类似于谷歌地图”:在这里,地图,这里是您的画布
,也被缩放。阅读参数xoffset,yoffset
,使用它可以更正缩放项的坐标。