在小部件上移动Tkinter视图

时间:2019-03-02 19:30:50

标签: python tkinter

有没有一种方法可以将Canvas的当前视图直接移到当前视图之外的小部件上?

我的意思是,如果我有一个带有width=5000height=1000的画布,并且在我的屏幕上有一个画布窗口,该窗口显示了screen width=300screen height=300的一部分,则有一个用于使用滚动条将视图移动到不带画布的坐标(600,700)的元素上?

1 个答案:

答案 0 :(得分:0)

滚动条不会做任何魔术。要使滚动条正常工作,只需将它们配置为调用画布的xviewyview方法。没有什么阻止您自己直接调用这些方法的。

xview_movetoyview_moveto以分数作为参数,并滚动画布,使该分数在画布的可见部分的上方或左侧。例如,要在画布上以1000像素宽的可绘制区域查看x坐标为600的元素,可以使用分数600/1000。

xview_scrollyview_scroll带有数字和描述该数字的字符串。该字符串应为“ units”或“ pages”。因此,值为10和一串“单位”将使视图在x方向上滚动10个像素。

这里是使用moveto方法的示例。它创建一个画布,其可滚动区域的宽度为5000像素,高度为1000像素,但可显示区域为300x300。然后绘制一个从600,700开始的矩形,然后将其滚动到视图中。即使矩形是在“屏幕外”绘制的,它也会出现在画布的左上方。

import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root, width=300, height=300, scrollregion=(0,0,5000,1000))
canvas.pack(fill="both", expand=True)

canvas.create_rectangle(600, 700, 650, 750, fill="red")
canvas.yview_moveto(700/1000)
canvas.xview_moveto(600/5000)

root.mainloop()