如何在 python tkinter 中将原点更改为 canvas 的中心

how to change the origin to center of the canvas in python tkinter

下面是在 canvas 上绘制坐标轴的函数 在这里我无法理解 canvas1.configure(scrollregion=(-x_origin, -y_origin, x_origin, y_origin)) scrollregion 如何工作的声明。

def draw_axes(canvas1):
    canvas1.update()
    x_origin = canvas1.winfo_width() / 2
    y_origin = canvas1.winfo_height() / 2
    canvas1.configure(scrollregion=(-x_origin, -y_origin, x_origin, y_origin))
    canvas1.create_line(-x_origin, 0, x_origin, 0, fill='black')
    canvas1.create_line(0, -y_origin, 0, y_origin, fill='black')

根据我的说法,它应该是 +x_origin 而不是 -x_origin 因为它在 +ve X 方向移动 但是当我尝试我的逻辑时,我无法得到我想要的输出

scrollregion与出处无关。它所做的只是影响可以滚动到视图中的虚拟 canvas 区域。当然,您可以滚动 canvas 使 0,0 出现在中心或右下角或其他任何位置,但 x 坐标仍会向右移动,y 坐标仍会向下而不是向上。

设置 scrollregion 也不会导致任何内容滚动。要发生滚动,您必须调用 xview and/or yview 方法在可滚动区域内滚动。

scrollregion的前两个坐标必须定义可滚动区域的左上角,后两个坐标表示右下角坐标。如果将它们反转,则行为有些不确定。

这是 scrollregion 的官方文档:

Specifies a list with four coordinates describing the left, top, right, and bottom coordinates of a rectangular region. This region is used for scrolling purposes and is considered to be the boundary of the information in the canvas.

下面是如何让 0,0 出现在 canvas 中心的示例:

import tkinter as tk

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400, background="black")
canvas.pack(fill="both", expand=True)

canvas.create_oval(-5,-5,5,5, fill="red")
canvas.configure(scrollregion=(-200,-200, 200, 200))
canvas.xview_moveto(.5)
canvas.yview_moveto(.5)

root.mainloop()