What Python-related code (PyGTK, Glade, Tkinter, PyQT, wxPython, Cairo, ...) could you easily use to create a GUI to do some or all of the following?
DiagramScene Eaxmple, поставляемый с PyQt, реализует большую часть необходимых вам функций. Он имеет фиксированную фоновую сетку, вы можете создать прямоугольный объект, но его размер нельзя изменить и он не привязан к сетке.
В этой статье SO есть советы по изменению размеров графических объектов с помощью мыши. Это для C ++ Qt, но эту технику должно быть легко воспроизвести в PyQt.
Я не думаю, что для привязки к сетке есть какие-либо встроенные функции. Возможно, вам потребуется повторно реализовать функцию itemChange (изменение GraphicsItemChange, const QVariant & value). Псевдокод:
if (object not possitioned exactly on the grid):
(possition the item on the grid)
Повторное размещение элемента вызовет повторный вызов itemChange, но это нормально, потому что элемент будет размещен правильно и больше не будет перемещен, поэтому вы не застрянете в бесконечном цикле.
Эти действия не так уж и сложны. Все, что вам действительно нужно для этого, - это обнаружение попаданий, что несложно (находится ли курсор в нужной области? Хорошо, тогда выполните операцию). Сложнее всего найти подходящий виджет холста для используемого инструментария.