Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Tkinter canvas как я могу привязать объект к другому объекту?

dsda аыа Знаток (355), на голосовании 2 месяца назад
Например квадрат к квадрату, или какими функциями можно реализовать
Голосование за лучший ответ
Анонимус Мудрец (14242) 3 месяца назад
Способы привязки:

Использование абсолютных координат:
  • При создании объекта, задайте его координаты относительно левого верхнего угла Canvas.
  • Для привязки к другому объекту, вычислите нужные координаты, используя координаты другого объекта.
 import tkinter as tk 

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

square1 = canvas.create_rectangle(50, 50, 100, 100, fill="blue")
square2 = canvas.create_rectangle(150, 50, 200, 100, fill="red")

# Привязать square2 к правому краю square1
canvas.coords(square2, 100, 50, 150, 100)

root.mainloop()
Использование метода move:
  • Создайте объекты.
  • Используйте canvas.move(id, dx, dy) для перемещения объекта.
  • Рассчитайте значения dx и dy относительно другого объекта.
 import tkinter as tk 

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

square1 = canvas.create_rectangle(50, 50, 100, 100, fill="blue")
square2 = canvas.create_rectangle(150, 50, 200, 100, fill="red")

# Привязать square2 к правому краю square1
canvas.move(square2, -50, 0)

root.mainloop()
Использование canvas.coords:
  • Создайте объекты.
  • Используйте canvas.coords(id, x1, y1, x2, y2) для изменения координат объекта.
  • Рассчитайте значения x1, y1, x2, y2 относительно другого объекта.
 import tkinter as tk 

root = tk.Tk()
canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

square1 = canvas.create_rectangle(50, 50, 100, 100, fill="blue")
square2 = canvas.create_rectangle(150, 50, 200, 100, fill="red")

# Привязать square2 к правому краю square1
x1, y1, x2, y2 = canvas.coords(square1)
canvas.coords(square2, x2, y1, x2 + 50, y2)

root.mainloop()
Дополнительные замечания:
  • Для более сложных привязок (например, вращение, масштабирование) вам понадобится использовать преобразования координат.
  • Привязка объектов может быть реализована через использование классов и методов.
  • Можно создать отдельный класс для управления привязкой объектов.
Похожие вопросы