Frage

Ich brauche Gtk2 für ein Projekt zu verwenden. Ich werde mit Python / Rubin dafür. Das Problem ist, dass Verpackung mir Art mystischer scheint. Ich versuchte, einen VBox mit, so dass ich die folgenden Widgets in meinem Fenster haben könnte (in der folgenden Reihenfolge):

  • menubar
  • Symbolleiste
  • Textansicht / Editor Kontrolle

Ich habe es geschafft, meinen Weg mit pack_start „erraten“ und bekommen das Layout ich brauche, aber ich möchte in der Lage sein, es zu verstehen. Die Dokumentation unter Rubin Gtk2 viel zu wenig intuitiv scheint (und so ist der Python ein, da es die gleichen , nur für python geschrieben), könnten Sie etwas Licht?

Auch ist set_size_request nicht immer funktioniert, wenn ich eine Komponente mit pack_start hinzufügen. Warum ist das so ?

War es hilfreich?

Lösung

Box Verpackung ist wirklich einfach, so vielleicht Ihr Versäumnis, es zu verstehen, weil Sie sich vorstellen, es ist komplizierter als es ist.

Layout ist entweder vertikal (wie ein Haufen Stein) oder horizontal (wie eine Schlange von Menschen). Jedes Element in diesem Layout kann erweitern oder es kann nicht erweitern.

Horizontal (HBox)

[widget][widget][widget][widget]

Vertikal (VBox)

[widget]
[widget]
[widget]
[widget]

So zum Beispiel, ein Horizontal-Layout (HBox) mit zwei Tasten, die der Code wäre:

import gtk
box = gtk.HBox()
b1 = gtk.Button('button1')
b2 = gtk.Button('button2')
box.pack_start(b1)
box.pack_start(b2)

Nun, da der Standard für die Verpackung ist expand=True zu haben, diese beiden Tasten zur Box hinzugefügt wird erweitert, und sie werden jeweils besetzen die Hälfte der Fläche. Egal, was die Größe des Behälters ist. Ich denke, dies als „dehnbar“.

Widgets erweitern:

[[    widget    ][    widget    ]]

Also, wenn Sie auf eine der Schaltflächen wollen nicht erweitern, werden Sie es wie folgt verpacken:

box.pack_start(b1, expand=False)

Non-Erweiterung widget:

[[widget][        widget        ]]

Dann wird die Button nur den Raum besetzt sie brauchen, um sich zu ziehen: Text + Grenzen + Schatten + Bilder (falls vorhanden) usw. Und die andere Taste erweitert die verbleibende Fläche zu füllen. Normalerweise Tasten müssen nicht erweitert werden, so dass eine reale Situation ist ein TextArea-, die Sie erweitern möchten würden das Fenster zu füllen.

Der andere Parameter, die übergeben werden kann, um pack_start ist die Füllung Parameter, und in der Regel kann dies ignoriert werden. Es ist hier genug zu sagen, dass, wenn expand=False dann die fill Parameter völlig ignoriert wird (weil es keinen Sinn, in dieser Situation macht).

Die andere Sache, die Sie erwähnt ist set_size_request. Ich würde generell sagen, dass dies keine gute Idee. Ich sage im Allgemeinen, denn es gibt Situationen, in denen Sie es verwenden müssen. Aber für jemand Anfang heraus mit einem GTK + Benutzeroberfläche Verpackung, würde ich empfehlen, es nicht verwenden. In der Regel lassen sich die Boxen und andere Behälter Ihr Layout für Sie. Die set_size_request nicht tut genau das, was man erwarten würde, es zu tun. Es ist nicht die Größe eines Widgets ändern, sondern nur, wie viel Platz wird es verlangen. Es kann mehr verwenden, und kann auch größere Räume füllen strecken. Es wird selten worden kleiner als die Anfrage, aber wieder, weil es nur eine „Anfrage“ es gibt keine Garantie, theat die Anforderung erfüllt werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top