2010-05-11 11 views
8

Kurz gesagt: Für diejenigen, die mit Sprachbindungen in Qt und Gtk + vertraut sind. Z.B. Python und Rubin. Gibt es irgendwelche Qualitäts- oder Leistungsunterschiede?Gtk + vs Qt Sprachbindungen

Weitere Hintergrund: Ich kenne C++ und Qt sehr gut. Minimale Erfahrung mit Gtk +. Ich weiß, dass C++ nicht ideal für Sprachbindungen ist, weil es keine gut definierte ABI (Application Binary Interface) gibt. Ich habe auch gelesen, dass Gtk + an andere Sprachen gebunden ist. Ich frage mich, wie sich das in der Praxis manifestiert. Sind die Gtk + Bindungen besser erhalten oder funktionieren sie besser als ihre Qt-Gegenstücke?

Ich bin derzeit ziemlich interessiert an der Go-Sprache, und sie haben begonnen, Gtk + -Bindungen zu entwickeln. C++ - Bindungen sind jedoch weit entfernt. Ich frage mich, ob es sich lohnt, Gtk + zu lernen.

+0

Was ist mit Vala [http://live.gnome.org/Vala]? es ist eine großartige neue Sprache (viel besser als C++). Es ist wie C#, produziert aber nativen Code und ist speziell für die GTK + -Entwicklung gedacht. – lepe

+0

Ich habe darüber nachgedacht, aber mein Hauptinteresse war in Go. Eine zweite Möglichkeit war die Kodierung von GUIs. Vala scheint sehr C#/Java mögen. Ich hätte einen frischeren Ansatz bevorzugt, der Go ähnelt, der auf GObject gebaut wurde. –

Antwort

8

Ich habe GTK und Qt in C++ und auch PyGTK und PyQt in Python ziemlich ausführlich verwendet.

Qt schlägt GTK Hands down - es ist eine viel flexiblere, moderne und saubere API. GTK fehlen auch einige Funktionen, die mir wichtig sind. Von einem Framework-Standpunkt würde ich Qt empfehlen.

Wie für Sprachbindungen (ich kann nur über Python sprechen, da ich nie die Ruby-Entsprechungen verwendet habe), glaube ich, dass PyGTK (mit Glade und einem Wrapper wie Padraig Bradys libglade) GUI-Programmierung wahnsinnig einfach und spaßig macht. Wenn Sie jedoch Ihre Software GPL (oder die Lizenzgebühr) bezahlen können, ist PyQt auch eine gute Option, und zwar nicht ganz so freundlich wie PyGTK + Glade (mit GTK können Sie Ihre Benutzeroberfläche in Glade als separates XML definieren Datei, so können Sie die Benutzeroberfläche optimieren, ohne Code zu berühren, in Qt, wenn Sie QtDesigner verwenden möchten, müssen Sie Code mit uic generieren, wenn ich mich richtig erinnere) die API selbst ist wirklich sehr schön zu verwenden und spiegelt die Qt-Frameworks sauberes Design sehr nah.

Überhaupt würde ich wahrscheinlich PyQt über PyGTK empfehlen, aber ich kann voreingenommen sein, da ich Qt heutzutage viel lieber als GTK bevorzuge, obwohl Sie beide ausprobieren und sehen könnten, was Sie bevorzugen - sie sind beide fast trivial Arbeiten. Wenn Sie ein großartiges Buch über PyQt suchen, empfehle ich Rapid GUI Programming qith Python and Qt.

Zusammengefasst: IMHO Qt schlägt GTK in Qualität und Fähigkeit. Sowohl PyGTK als auch PyQt sind von ausgezeichneter Qualität und die Fähigkeiten spiegeln das zugrundeliegende Framework wider, obwohl PyGTK Glade XML-Dateien laden kann.

+0

Danke für die Eingabe :-) Tatsächlich Qt hat Ihnen erlaubt, Ihre Qt-Designer-Dateien als XML zu speichern und sie direkt für einige Zeit jetzt zu laden. Ich lese Gtk + Model-View-Controller Zeug. GtkTreeView usw. Bis jetzt denke ich, dass das Design besser aussieht als die Lösung von Qt. Aber ich habe es nicht benutzt, also könnte ich mich irren. Irgendwelche Kommentare dazu? Gibt es bestimmte Bereiche in Qt, mit denen Sie leichter arbeiten können als mit Gtk? Z.B. Layout, Signal-Slot-System, Erstellen neuer Widgets oder einfach nur die Tatsache, dass C++ einfacher als C zu arbeiten ist? –

+0

Interessant, als ich vor einiger Zeit danach gesucht habe, habe ich nichts gefunden .. Ich mag Qts Signal-Slot-Mechanismus, es ist sehr flexibel und einfach zu bedienen; Ich mag das Graphicsview-System für Qt besser als die GTK-Equalents und ich fand, dass das Qt-Widget-Set vollständiger und funktionsreicher ist (zB ohne klobige Erweiterungen, GTK hat keine Unterstützung für andockbare Windows). Ich mache die meiste Zeit in C++ und finde es bequem und einfach (nicht ganz so einfach wie Python, aber nahe genug, dass ich gerne Qt-Code in C++ schreibe, besonders Zeichenkode, ohne sich Gedanken über die Komplexität des Codes machen zu müssen) – Dan

+0

Okay Interessant. Ich habe nicht an all die anderen APIs gedacht, die Qt hat, wie Graphicsview. Was ist wirklich schön. Ich schaute auf GtkComboBox und GtkTreeView und das sah besser aus als QComboBox und QTreeView. Einfacher, Widgets in Spalten zu setzen und Modell zu definieren. Was meinst du mit klobigen Erweiterungen? Die anderen GObject-basierten APIs wie Clutter etc? –

0

gibt es C++ gtk + -Bindungen. Google für gtkmm.

+0

Ich weiß. Ich frage nicht, ob sie existieren. Aber über ihre Qualität –

1

Ich habe sowohl mit PyQt als auch mit PyGTK gearbeitet und würde sagen, dass sie beide regelmäßig verwaltet und mit ihren übergeordneten Frameworks synchronisiert werden. Jedoch, und das ist völlig subjektiv, fand ich lohnender arbeiten mit PyGTK als mit PyQt, auch wenn ich vorher keinen Code mit GTK geschrieben hatte. Wenn Sie gut Qt wissen, gehen Sie mit Qt.

2

Ich denke, dass GTK-Bindungen älter als Qt sind (und so ein bisschen reifer), aber sie sind beide verwendbar und Ihre Vorkenntnisse von Qt sollten der Hauptfaktor in Ihrer Wahl sein.

Ich entwickelte kleine GUIs mit beiden Qt und GTK mit ihren Python-Bindungen und fand die beiden Äquivalente. Einiges bedauert jedoch die PyQt-Bindungen mit Qt-Containern (QVector, ...), die nicht in reguläre Python-Datenstrukturen übersetzt werden und somit dem Code ein wenig Komplexität hinzufügen. Ich erinnere mich nicht an die gleichen Probleme mit PyGTK.

+0

QVariant, und andere Geräusche werden nicht benötigt, wenn Sie PyQt mit python3 verwenden – pihentagy

1

Ich habe versucht, ein paar Kombinationen um Qt: RubyQt, JRuby + Jambi, PyQt. Der erste endet schnell in verschiedenen Segmentierungsfehlern. Meine Qt-Fähigkeiten können das Problem sein, aber insgesamt sind die seg-Fehler nicht ganz lesbar.Das Forum für RubyQt ist fast tot, also erwarte nicht, dort viele Informationen zu finden.

Also zog ich nach JRuby + Jambi. Das funktionierte bis gut, ich habe hier und da einige fehlende Funktionen erreicht. Außerdem musste ich ein richtiges Signal/Verbindung für JRuby implementieren. Also, mehr oder weniger ein Hack. Nicht überzeugend.

Endlich bin ich zu Python gewechselt (was ich nicht sehr mag). Aber woooh, was für ein Unterschied. Bindungen sind aktuell, ich muss noch einen segmetatio Fehler feststellen, Fehlermeldungen sind meist sehr erklärend. Soweit es mich betrifft, ist Python + Qt ein klarer Gewinner.

Bitte beachten Sie, dass ich diese Kombinationen probiert habe, um eine passende Sprache/Qt-Bindung zu finden, so dass ich mit meinen Kommutierungszeiten (ca. 2 Stunden pro Tag) eine Produktion erstellen kann. So ist meine Toleranz gegenüber kleinen aber nervigen Problemen wie Segmentierungsfehlern 0. Ich muss auch auf Windows und Linux entwickeln. Also ist Windows-Installation notwendig (und auch hier ist Python ein klarer Gewinner).

Verwandte Themen