Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将tkinter画布左上角移动到项目_Python_Tkinter - Fatal编程技术网

Python 将tkinter画布左上角移动到项目

Python 将tkinter画布左上角移动到项目,python,tkinter,Python,Tkinter,画布上有一个对象,我想缩放它。当我缩放它(+)时,它会向下移动到右侧,但我希望画布随着这个移动的缩放项目(用户视图中的捕捉项目,它将是一个锚定)一起移动。我怎么能这么做?我需要这个,因为如果我有大的画布项目,它们会在很远的距离上跳跃,并且在缩放后很难找到它们。如果有帮助的话,我会把所有的条目都保存在字典里 PS.使用+-进行缩放 from tkinter import * main = Tk() canvas_items = {} frame = Frame(main) frame.pack

画布上有一个对象,我想缩放它。当我缩放它(+)时,它会向下移动到右侧,但我希望画布随着这个移动的缩放项目(用户视图中的捕捉项目,它将是一个锚定)一起移动。我怎么能这么做?我需要这个,因为如果我有大的画布项目,它们会在很远的距离上跳跃,并且在缩放后很难找到它们。如果有帮助的话,我会把所有的条目都保存在字典里

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()
从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
,使用它可以更正缩放项的坐标。