как изменить начало координат в центре холста в python ткинтер - PullRequest
0 голосов
/ 08 апреля 2020

Ниже приведена функция рисования осей на холсте. Я не могу понять утверждение 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 Но когда я попробовал свою логику c, я не могу получить желаемый результат

1 Ответ

0 голосов
/ 08 апреля 2020

scrollregion не имеет ничего общего с источником. Все, что он делает, это влияет на область виртуального холста, которую можно прокрутить в поле зрения. Конечно, вы можете прокрутить холст, чтобы 0,0 отображался в центре или внизу справа или в любом другом месте, но координаты x по-прежнему будут go вправо, а координаты y по-прежнему будут go вниз, а не вверх.

Установка scrollregion также не вызывает прокрутки. Чтобы прокрутка произошла, вы должны вызвать методы xview и / или yview для прокрутки в области прокрутки.

Первые две координаты scrollregion должны определять левый верхний угол области прокрутки, а вторые две координаты представляют правые нижние координаты. Если вы измените их, поведение будет несколько неопределенным.

Это официальная документация для scrollregion:

Указывает список с четырьмя координатами, описывающими слева, сверху, справа, и нижние координаты прямоугольной области angular. Этот регион используется для прокрутки и считается границей информации на холсте.

Вот пример того, как заставить 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()
...