GUI ohne objektorientierte Programmierung

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
bastel-wastel
User
Beiträge: 28
Registriert: Samstag 20. Februar 2010, 15:14

Hallo miteinander,

ich programmiere noch ganz klassisch, also nicht objektorientiert.
Gibt es eine Möglichkeit mit Python dennoch grafische Oberflächen bauen kann?

Ein Bekannter hat gemeint, dass dies mit "C" und GTK funktioniert. Geht das auch mit Python?
Ich bin nicht auf GTK fixiert und würde auch entsprechend anderes nehmen.
Alles was ich im Netz finde, hat mit Objekten zu tun.
Ich möchte auf der Oberfläche hauptsächlich mehrere Grafiken (Linienplots) darstellen.

Wer schön, wenn mir jemand helfen könnte.


Grüße bastel
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Wenn es dir um den Verzicht des Entwurfs eigener Klassen geht: Sicher, kannst du machen, nicht nur mit Gtk.
Sofern es nicht nur ein ziemlich kleines Progrämmchen ist, dürfte der bessere Weg aber sein, dich zunächst mit objektorientierten Elementen vertraut zu machen (und gerade mit Python ist das nicht sehr schwierig) und dann deine GUI zu entwickeln. Eine Alternative zu Gtk könnte Tkinter sein, das mit dem Canvas-Widget gute Voraussetzungen für das Erstellen von Liniengrafiken mitbringt.
bastel-wastel
User
Beiträge: 28
Registriert: Samstag 20. Februar 2010, 15:14

Danke für Deine Antwort.

Ich würde aber doch ganz gerne auf Objekte verzichten. Ist ja nicht so, dass ich es noch nie probiert hätte.
Aber ich komme damit einfach nicht klar. Wenn ich mich lange damit beschäftigt habe, glaube ich es zu können.
Wenn ich es dann aber einsetzen will, merke ich, dass ich es doch nicht blicke :(

Hast Du eventuell einen Link oder ein Stichwort nach dem ich suchen könnte? Irgendwas ohne Objekte?

Grüße bastel
deets

Du wirst leider nicht drumherum kommen. GUIs sind im Grunde *immer* OO - auch wenn GTK zB zwar in C geschrieben wurde, so haben die sich darin einen eigenen, dynamischen Objekt-Layer gebaut. Das heisst es ist OO, nur mit einer nicht dafuer ausgelegten Sprache. Was es wenn eher *noch* schwieriger macht.

Zum Beispiel gibt es eben in jeder GUI widgets, und davon Spezialisierungen wie zB Buttons, Scrollbars, Listen-Views. Und das sind in OO Ableitungen oder Spezialisierungen, und mittels OO-typischer Techniken wird zB das Kommando "mal dich mal" von einem Vater-Objekt an seine Kinder-Objekte delegiert - und je nachdem, was die *wirklich* sind, malen die sich dann. Das ist klassisch OO, und genauso macht das auch GTK.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Zudem ist in Python alles ein Objekt ;-) Das wirklich schwierige dürften vor allem die Nebenläufigkeiten sein, an die man sich bei GUIs gewöhnen muss.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
bastel-wastel
User
Beiträge: 28
Registriert: Samstag 20. Februar 2010, 15:14

Danke Euch !

Ich hab's befürchtet, dass ich nicht drumrum komme :?
Naja, dann versuche ich es eben nochmal mit OO.

Mit der GUI werde ich mir dann wohl zuerst mal GTK und glade anschauen. Grafikelemente automatisch setzen zu lassen gefällt mir nicht so.


Grüße bastel
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

bastel-wastel hat geschrieben:Irgendwas ohne Objekte?
Python ohne Objekte geht nicht (siehe Hyperion) und ich vermute mal, dass allen in Frage kommenden GUI-Toolkits gemeinsam ist, dass ihre Widgets (oder wie immer man es im jeweiligen Toolkit nennt) als Objekte von entsprechenden Klassen erzeugt werden. Ich habe nur gesagt, dass du auch ohne eigene Klassenentwürfe GUI-Programmierung betreiben kannst.

Wenn es dir nur um einfache Zeichenfunktionen geht und es nicht auf Geschwindigkeit ankommt, dann wäre etvl. turtle oder frog etwas für dich.

Code: Alles auswählen

from frog import Pool, Frog

page = Pool(width=600, height=400)
pen = Frog(page)
pen.color, pen.fillcolor = "red", "yellow"
pen.fill = True
pen.speed = 10
for i in range(36):
    pen.move(200)
    pen.turn(170)
page.ready()

Code: Alles auswählen

from turtle import *

color('red', 'yellow')
begin_fill()
for i in range(36):
    forward(200)
    left(170)    
end_fill()
done()
lunar

@bastel-wastel: Falls es wirklich nur darum geht, aus Daten Plots zu erzeugen und anzuzeigen, ist vielleicht matplotlib einen Blick wert. Diese Bibliothek konzentriert sich nur auf das Erzeugen von Diagrammen und Plots und ist daher einfacher als vollwertige UI-Bibliotheken.
bastel-wastel
User
Beiträge: 28
Registriert: Samstag 20. Februar 2010, 15:14

lunar hat geschrieben:@bastel-wastel: Falls es wirklich nur darum geht, aus Daten Plots zu erzeugen und anzuzeigen, ist vielleicht matplotlib einen Blick wert. Diese Bibliothek konzentriert sich nur auf das Erzeugen von Diagrammen und Plots und ist daher einfacher als vollwertige UI-Bibliotheken.
Danke, matplotlib wollte ich sowieso benutzen ;)

Mittlerweile funktioniert das OO Programmieren mit pyGTK ganz ordentlich. Habe in meinem Hauptfenster auch die benötigten Grafiken (aus der matplotlib) einbetten könnten.

Lediglich das Packing finde ich bei pyGTK bisher noch sehr aufwändig :K
Das nächste Mal versuche ich es mit glade. Ich erhoffe mir davon, dass der Quellcode nicht zu sehr aufgebläht wird.

Was bevorzugt Ihr: Packing im Quellcode oder über glade zusammen klicken? Was scheint für den Einstieg schneller ans Ziel zu führen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

bastel-wastel hat geschrieben:Was bevorzugt Ihr: Packing im Quellcode oder über glade zusammen klicken? Was scheint für den Einstieg schneller ans Ziel zu führen?
Glade. Finds eh Stuss was anderes als libglade/GtkBuilder zu verwenden. Also außer dem guten Argument "Hey, ich mag gerne seitenweise GUI-Code schreiben".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten