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!
Graph in Qt einbinden und editieren
- 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
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

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
Danke erstmal für die Antwort 
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!
Das scheint leider mit Java oder sowas ähnlichem implementiert zu sein, oder täusche ich mich da?


Was genau sind ist denn SVGs? Ne Art Bildformat oder sowas?Also Du kannst in Qt doch prima SVGs anzeigen - und Graphviz kann prima SVGs erstellen. Das wäre wohl der Ansatz, den ich verfolgte.
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/
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 weiterverarbeitenEine 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

- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
http://lmgtfy.com/?q=svgmaishine hat geschrieben: Was genau sind ist denn SVGs? Ne Art Bildformat oder sowas?
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: Und in Verbindung mit Pygraphviz hab ich leider auch nichts gefunden, das ganze soll ja alles in Python geschrieben werden.
Ä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: Mit C++ und Graphviz wäre das ganze bestimmt einfacher, finde für Python auch leider nichts dazu im Netz!
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 caresmaishine hat geschrieben: Das scheint leider mit Java oder sowas ähnlichem implementiert zu sein, oder täusche ich mich da?

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

Ah so, okIch 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

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
@lunar: Ich dachte immer, "PyGraphviz" sei nur ein einfacher Wrapper um die Konsolentools... (gibt auch noch andere, "netao", "circo" usw.)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.
Edit: Qed

@maishine: EIn Blick in die Doku und ich fand dieses

encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert