Подтвердить что ты не робот

Есть ли библиотека интерактивного графического интерфейса для python

Я ищу библиотеку интерактивного графического интерфейса для Python.

В разделе " graph" я имел в виду набор узлов, соединенных множеством вершин (а не график значений по оси xy, ни сетка пикселей).

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

В Python я имел в виду язык программирования Python, библиотека графического отображения должна иметь привязку CPython. У меня есть Python 2.7 и Python 3.1, но при необходимости можно понизить до 2.6. Это требование языка связано с тем, что набор данных, с которыми я работаю, имеет только привязку Python.

Библиотека графического отображения должна поддерживать ориентированный график и иметь возможность автоматически компоновать узлы. Мне нужно поставить метки на узлы.

Предпочтительно, алгоритм компоновки должен размещать соседние узлы рядом друг с другом. Он должен иметь возможность обрабатывать от 100-1000 узлов и примерно 300-4000 вершин разумно в моем 4-летнем ноутбуке (я обычно начинаю с около 100 узлов, но число может расширяться в зависимости от ввода пользователя). Предпочтительно это должна быть библиотека с не слишком большим количеством зависимостей (за исключением, возможно, для Gnome). Предпочтительный вариант с открытым исходным кодом.

Я уже написал простой прототип своей программы, используя Tkinter Canvas, но для расширения программы мне нужна более серьезная библиотека графического интерфейса. Я посмотрел на graphviz и matplotlib, но, по-видимому, они предназначены только для работы со статическими графами и, видимо, потребуется значительная работа для интерактивных манипуляций (исправьте меня, если я ошибаюсь, я только посмотрел на них кратко), Я также попытался создать граф в SVG файле и использовать Inkscape для его просмотра, но он слишком медленный и занимает слишком много памяти, а из-за большого количества вершин он становится запутанным беспорядком.

4b9b3361

Ответ 1

Похоже, что Nodebox может быть тем, что вы хотите:

http://nodebox.net/code/index.php/Graph Mac OSX

http://www.cityinabottle.org/nodebox/ Windows (используя OpenGL)

Nodebox screenshot

Объект графика имеет функциональность для взаимодействия с мышью, в комплекте в объекте graph.events. Он имеет следующие свойства:

  • graph.events.hovered: None или node, над которым курсор мыши.
  • graph.events.pressed: None или node, на котором находится мышь нажав вниз.
  • graph.events.dragged: None или node.
  • graph.events.clicked: None или последний node нажал.
  • graph.events.popup: при True отобразится всплывающее окно над зависает node.

Кроме того, на экране появился Gephi, похоже, что у вас могут быть функциональные возможности.

http://gephi.org/ Windows, Linux и Mac OSX

Gephi - это интерактивная визуализация и разведочная платформа для всех видов сетей и сложных систем, динамические и иерархические графики.

gephi screenshot

Ответ 2

Если вы этого не сделали, вам обязательно стоит посмотреть igraph.

Это мощная библиотека, которая может обрабатывать большие графики и разные стили макета. Он также может использоваться для ориентированных графиков и для интерактивных и неинтерактивных визуализации в 2D и 3D в соответствии со списком features. Существует также tutorial.

Обновление: Другая известная библиотека NetworkX, для которой существуют пакеты Python здесь. Обратите внимание, что программный Nodebox для Mac/Windows, рекомендованный Acorn, использует алгоритмы NetworkX.

Ответ 3

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

http://nodebox.net/code/index.php/Graph

с открытым кодом узла. Это не работает, что библиотека графов совместима только с узлом узла Mac OSX. Но в любом случае это нормально, потому что вам это не нужно.

См. например, следующий вопрос:

Добавление метки к краю графика в nodebox opnegl

Он показывает пример кода, который работает для меня, код может быть изменен, так что нажатие на node не только позволяет перемещать node, но также позволяет изменять график.

Просто удалите

label = "Placeholder"

из кода, и он работает.

EDIT:

Здесь я приведу более подробный пример кода: Nodebox open GL Graph, функция размера не распознана. (Ubuntu)