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

2024-05-19 15:06:04 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是在画布上绘制轴的函数 在这里,我无法理解语句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_原点而不是-x_原点,因为它在+ve x方向上移动 但是当我尝试我的逻辑时,我无法得到我想要的输出


Tags: 函数configuredef画布createline绘制语句
1条回答
网友
1楼 · 发布于 2024-05-19 15:06:04

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

设置scrollregion也不会导致任何东西滚动。要进行滚动,必须调用xview和/或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显示在画布中心的示例:

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()

相关问题 更多 >