Box Verpackung ist wirklich einfach, so vielleicht Ihr Fehler zu verstehen ist, weil Sie sich vorstellen, es ist komplizierter als es ist.
-Layout ist entweder vertikal (wie ein Stapel von Ziegeln) oder horizontal (wie eine Warteschlange von Menschen). Jedes Element in diesem Layout kann erweitert werden oder es kann nicht erweitert werden.
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)
Jetzt, da der Standard für die Verpackung expand=True
haben soll, fügen Sie beide diese Schaltflächen hinzu Ed auf die Box wird erweitert und sie werden jeweils die Hälfte der Fläche einnehmen. Egal wie groß der Container ist. Ich halte das für "dehnbar".
Expanding-Widgets:
[[ 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)
nicht expandierenden widget:
[[widget][ widget ]]
Dann belegt die Schaltfläche nur den Platz, den sie zum Zeichnen benötigt: Text + Rahmen + Schatten + Bilder (falls vorhanden) e tc. Und die andere Schaltfläche wird erweitert, um die verbleibende Fläche zu füllen. Normalerweise müssen Schaltflächen nicht erweitert werden. Eine realistischere Situation ist also eine TextArea, die Sie erweitern möchten, um das Fenster zu füllen.
Der andere Parameter, der an pack_start
weitergegeben werden kann, ist der Füllungsparameter, und in der Regel kann dies ignoriert werden. Es ist hier genug zu sagen, dass wenn expand=False
dann der Parameter vollständig ignoriert wird (weil es in dieser Situation keinen Sinn macht).Die andere Sache, die Sie erwähnt haben, ist set_size_request
. Ich würde generell sagen, dass dies keine gute Idee ist. Ich sage allgemein, weil es Situationen gibt, in denen Sie es verwenden müssen. Aber für jemanden, der damit anfängt, eine GTK + Benutzeroberfläche zu packen, würde ich dringend empfehlen, sie nicht zu benutzen. Lassen Sie die Boxen und anderen Container im Allgemeinen Ihr Layout für Sie handhaben. Die set_size_request
tut nicht genau das, was Sie erwarten würden. Es ändert nicht die Größe eines Widgets, sondern lediglich, wie viel Speicherplatz es benötigt. Es kann mehr verwenden und kann sich sogar ausdehnen, um größere Räume zu füllen. Es wird selten kleiner als die Anfrage, aber wieder, weil es nur eine "Anfrage" ist, gibt es keine Garantie, dass die Anfrage erfüllt wird.
Für alle, die Probleme mit sprachspezifischen GTK + -Dokumenten haben, empfehle ich dringend, die primären C-Dokumente zu verwenden, die jede Funktion unter [developer.gnome.org] (https://developer.gnome.org) vollständig erklären. – oldtechaa