Seite 1 von 1

Grundlegendes zu Menu, Box und Button

Verfasst: Mittwoch 13. September 2006, 09:55
von kable
Hallo miteinander

Wie der Titel schon andeutet, bin ich noch ein ziemlicher Anfänger in Sachen pygtk. Ich habe versucht ein einfaches GUI zu programmieren, bin aber schon an den grundlegenden dingen gescheitert. Das Einzige, was mir gelungen ist, ist ein einfaches Fenster zu erstellen.

Was ich nun machen möchte ist, erst einmal das Fenster in Bereiche aufzuteilen ( Soweit ich das verstanden hab, sollte das irgendwie mit gtk.Box gehen )
Es sollte dann etwa so aufgeteilt sein:
Bild
Oben kommt eine Menüleiste hin, links unten ein Ausgabefenster und rechts davon ein Bereich für Einstellungen.

Was ihr mir jetzt erklären könntet wäre:
- Wie genau teile ich das Fenster so auf
- Wie erstelle ich ein Menü
- Gibt es eine einfache Methode, Buttons in einem Bereich anzuordnen

Es würde mich freuen, wenn ihr alle Zusammenhänge zwischen den einzelnen Befehlen erklärt, damit ich auch das System dahinter verstehe.

Verfasst: Mittwoch 13. September 2006, 14:43
von Leonidas
Aus dem Kopf, da ich es nicht mehr so genau weiß (kannst du aber recht einfach im Tutorial finden):
Du erstellst eine gtk.MenuBar, diese fügst du deinem gtk.WindowWidget hinzu. Dann erstellst du darin eine gtk.HBox und fügst auch diese dem gtk.Window hinzu. Eine anderen Widgets baust du dann in diese gtk.HBox ein.

Verfasst: Mittwoch 13. September 2006, 17:02
von kable
Ein bisschen weiter bin ich jetzt gekommen:
Das Menü funktioniert, wie ich mir es vorgestellt hatte. Nur ist es immer noch über die ganze Höhe des Fensters ausgebreitet.
Die Verwendung der box funktion musst du mir wohl noch etwas genauer erklären...

Verfasst: Mittwoch 13. September 2006, 17:05
von Leonidas
Das ist eigentlich ganz einfach, lies dir das Kapitel 4 in dem Tutorial durch, dort steht was es für Layout Manager gibt und wie man sie benutzt. Gut möglich, dass du das Menü in eine VBox ganz oben reinpacken musst, damit es nicht das ganze Fenster einnimmt und die restlichen Boxen und Widgets weiter unten in die VBox packst. Ich habe das nicht mehr genau im Kopf.

Verfasst: Donnerstag 14. September 2006, 12:14
von Vortex
Du erstellst eine gtk.MenuBar, diese fügst du deinem gtk.WindowWidget hinzu. Dann erstellst du darin eine gtk.HBox und fügst auch diese dem gtk.Window hinzu.
Das klappt schonmal nicht, weil ein gtk.Window nur _ein_ Child-Widget haben kann.

Ich würde sagen du machst das so:

Du erstellst ein gtk.Window und packst da eine VBox rein. In die VBox packst du dann die Menubar, aber du musst angeben, dass sie sich nicht ausdehnen soll. Das geht so (achtung aus dem Kopf raus :) ):

Code: Alles auswählen

vbox.pack_start(menubar, False, False, 0)
Dann erstellst du eine HBox und packst die als nächstes in die VBox, dann hast du schonmal das Layout so wie du es haben wolltest. Aks nächstes kannst du dann die VBox mit weiteren Containern oder Widgets füllen. Bei gtk erzeugst du "Layouts" einfach indem du H- und VBoxen ineinander verschachtelst.

Verfasst: Donnerstag 14. September 2006, 15:15
von Leonidas
Vortex hat geschrieben:Bei gtk erzeugst du "Layouts" einfach indem du H- und VBoxen ineinander verschachtelst.
Oder ein gtk.Table verwendest, was ich als sehr bequem und einfach zu benutzen empfinde, wenn man erstmal die Funktionsweise verstanden hat.

Verfasst: Donnerstag 14. September 2006, 18:14
von kable
Danke vielmals!

Das Boxensystem habe ich jetzt glaube ich verstanden und mein Menü sieht auch so aus, wie ich es mir vorgestellt habe.

Da das nun geschafft wäre, stehe ich vor dem nächsten Problem:
Ich möchte in einem Bereich von diesem Fenster etwas zeichnen. Sollte, so weit ich das verstanden habe, mit Drawable oder mit Tkinter -> Canvas gehen. Nur, in den Beispielen wird immer ein neues Fenster erstellt, in dem dann gezeichnet wird. Ist es denn auch möglich so einen Zeichen-Bereich in einem bestehenden Fenster einzurichten?

Verfasst: Donnerstag 14. September 2006, 20:10
von Leonidas
kable hat geschrieben:Da das nun geschafft wäre, stehe ich vor dem nächsten Problem:
Bitte nur eine Frage pro Thread, vor allem da diese mit der Vorherigen nichts zu tun hat.