Tkinter применяет тот же масштаб для новых элементов, нарисованных на холсте - PullRequest
0 голосов
/ 11 июля 2020

Итак, мне нужно реализовать панорамирование и зомм на холст, где я рисую несколько линий. Я сделал это в соответствии с этим сообщением.

Проблема в том, что мне нужно динамически добавлять дополнительные элементы (линии, прямоугольники и т. Д.) На холст, который можно масштабировать или панорамировать с помощью пользователь. Панорамирование не является проблемой, поскольку это операция холста, приводящая к сдвигу координат, поэтому, если вы продолжаете последовательно рисовать в координатах, относящихся к одному и тому же источнику, новые элементы, которые я добавляю, оказываются там, где я хочу, чтобы они были по отношению к уже существующим. нарисованные элементы.

Проблема связана с масштабированием, поскольку это операция над объектом, которая масштабирует элементы, нарисованные на холсте, с коэффициентом по отношению к точке. Проблема в том, что если я хочу изменить элемент и мне нужно его перекрасить или добавить новый, новый элемент не масштабируется и не соответствует элементам, уже отображаемым на экране. Мне пришлось бы применить всю историю масштабирования к вновь нарисованным элементам по порядку или что-то в этом роде.

Например, скажем, я рисую 3 линии (L1, L2 и L3), образуя равносторонний треугольник с точками P1, P2 и P3. Затем я панорамирую холст, удаляю L1 (который простирается от P1 до P2), создаю новую линию L1 между точками P1 и P2. Новая линия L1 рисуется точно там, где была исходная линия L1, поскольку панорамирование - это просто сдвиг видимой области холста, и, таким образом, сохраняется опорный кадр координат.

Теперь я увеличиваю масштаб, так что L1 , L2 и L3 масштабируются на определенную величину относительно того, где был курсор мыши, когда я перемещал колесо. Я снова удаляю L1 и создаю новую линию между точками P1 и P2. Эта новая линия L1 не масштабировалась так же, как была первая L1, и, хотя они имеют одни и те же начальные точки, новый L1 рисуется без масштабирования и, следовательно, не имеет общей вершины с L2 и L3.

Есть ли элегантный способ решить эту проблему, чтобы я мог рисовать новые элементы, которые оказываются там, где должны?

РЕДАКТИРОВАТЬ: У меня точно такая же проблема: Предотвращение перемещения увеличенных объектов холста tkinter / изменение координат Что до сих пор не решено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...