Graph in Qt einbinden und editieren

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
maishine
User
Beiträge: 3
Registriert: Mittwoch 4. September 2013, 09:05

Hallo,
ich suche eine Bibliothek, mit der ich aus einer .csv Datei eine baumartige Graphstruktur (also keine kurvenartigen Graphen!) erzeugen kann und diese dann in den Qt Designer einbinden kann und dort per Buttons noch Einstellungen vornehmen kann, z.B. hereinzoomen etc.
Zur Auswahl stehen bis jetzt Networkx, Pyqtgraph oder pygraph. Mit pygraphviz habe ich aus meiner .csv Datei schon einen Graphen erzeugen können, dieser ist jedoch von der Klasse pygraphviz.agraph und ich denke nicht, dass ich diesen einbinden kann in meine GUI (finde darüber leider auch nirgends Informationen). Falls jemand weiß, welche Klassen ich in Qt einbinden könnte (und am besten noch mit welcher Bibliothek das geht) würde ich mich sehr über eine Antwort freuen.
Danke schon mal im Vorraus!
Zuletzt geändert von maishine am Mittwoch 4. September 2013, 20:30, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also Du kannst in Qt doch prima SVGs anzeigen - und Graphviz kann prima SVGs erstellen. Das wäre wohl der Ansatz, den ich verfolgte.

Alternativ evtl. etwas für Dich:
http://kde.org/applications/education/rocs/

Evtl. kannst Du das direkt nutzen oder zumindest Komponenten daraus verwenden?

Eine Frage hätte ich noch: Sicher, dass es CSV als Grundlage für baumartige Graphenstrukturen sein muss? Kann ich mir gerade nicht als optimal vorstellen... aber vielleicht täusche ich mich da auch :-D
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
maishine
User
Beiträge: 3
Registriert: Mittwoch 4. September 2013, 09:05

Danke erstmal für die Antwort :)
Also Du kannst in Qt doch prima SVGs anzeigen - und Graphviz kann prima SVGs erstellen. Das wäre wohl der Ansatz, den ich verfolgte.
Was genau sind ist denn SVGs? Ne Art Bildformat oder sowas?
Und in Verbindung mit Pygraphviz hab ich leider auch nichts gefunden, das ganze soll ja alles in Python geschrieben werden.
Mit C++ und Graphviz wäre das ganze bestimmt einfacher, finde für Python auch leider nichts dazu im Netz!

Code: Alles auswählen

Alternativ evtl. etwas für Dich:
http://kde.org/applications/education/rocs/
Das scheint leider mit Java oder sowas ähnlichem implementiert zu sein, oder täusche ich mich da?
Eine Frage hätte ich noch: Sicher, dass es CSV als Grundlage für baumartige Graphenstrukturen sein muss? Kann ich mir gerade nicht als optimal vorstellen... aber vielleicht täusche ich mich da auch :-D
Ich bekomme die Matrix mit den Kanten des Graphen in einer .csv Datei, wie optimal das ist, kann ich leider nicht beantworten. Möchte diese Daten einfach nur weiterverarbeiten :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

maishine hat geschrieben: Was genau sind ist denn SVGs? Ne Art Bildformat oder sowas?
http://lmgtfy.com/?q=svg
maishine hat geschrieben: Und in Verbindung mit Pygraphviz hab ich leider auch nichts gefunden, das ganze soll ja alles in Python geschrieben werden.
Ach so, das *ist* die Aufgabe - ich dachte Du suchst ein Werkzeug und versuchst es selber zu machen, da Du nichts gefunden hast. Naja, ich vermute schon, dass man das Zielformat irgend wie auch über diese Lib beeinflussen kann. Da musst Du eben mal durch die Doku gucken.
maishine hat geschrieben: Mit C++ und Graphviz wäre das ganze bestimmt einfacher, finde für Python auch leider nichts dazu im Netz!
Ähem... inwiefern das? Ich vermute mal, dass Du auch in C++ ein API benutzen musst - da spielt doch die Sprache keine Rolle, sofern die Libs dieselbe Funktionalität haben... da Du aber nicht einmal wusstest, was SVG ist, glaube ich kaum, dass das in C++ einfacher gewesen wäre... (denn etwas skalierbares ist dabei imho der Schlüssel zum Erfolg)
maishine hat geschrieben: Das scheint leider mit Java oder sowas ähnlichem implementiert zu sein, oder täusche ich mich da?
Ich vermute mal C++ (wie die meisten KDE-Programme) und ein wenig JavaScript. Aber graphviz ist ja auch nicht in Python oder C++ geschrieben - insofern, who cares ;-) Evtl. wäre es ja möglich, Deine Daten in "rocs" zu importieren und damit das Problem direkt zu lösen (sofern die Erstellung eines eben solchen Programms nicht die Aufgabe ist).

Qt ist ja auch in C++ geschrieben, man kann es aber über Python benutzen. Genauso könnte man einen Wrapper sicherlich auch um Komponenten von Rocs bauen - aber das kommt natürlich auf das Know-How, den potenziellen Nutzen und den Aufwand an. Es war halt nur eine Idee von mir :-)
Ich bekomme die Matrix mit den Kanten des Graphen in einer .csv Datei, wie optimal das ist, kann ich leider nicht beantworten. Möchte diese Daten einfach nur weiterverarbeiten :)
Ah so, ok :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
lunar

Du kannst mit dem normalen Graphiviz-Kommandozeilentool (iirc "dot") den Graph in eine SVG-Datei zeichnen, und diese anschließend in Qt anzeigen. Das ist wohl der einfachste und schnellste Weg.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

lunar hat geschrieben:Du kannst mit dem normalen Graphiviz-Kommandozeilentool (iirc "dot") den Graph in eine SVG-Datei zeichnen, und diese anschließend in Qt anzeigen. Das ist wohl der einfachste und schnellste Weg.
@lunar: Ich dachte immer, "PyGraphviz" sei nur ein einfacher Wrapper um die Konsolentools... (gibt auch noch andere, "netao", "circo" usw.)

Edit: Qed :-)

@maishine: EIn Blick in die Doku und ich fand dieses :-) (Ok, steht nicht im Tutorial - aber natürlich muss man darüber hinaus dann auch mal in die API-Doku gucken, wenn mehr über eine Methode erfahren will)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
maishine
User
Beiträge: 3
Registriert: Mittwoch 4. September 2013, 09:05

Vielen Dank für eure Hilfe!
Da ich die draw-Methode schon benutzt habe, aber leider die API übersehen habe, kann ich mein daraus erzeugtes Bild gleich mal versuchen einzubinden!
Antworten