Frage Erstellen von Widgets mit GtkBuilder


Ich verwende Glade, um eine Box mit Widgets zu erstellen und lade diese Widgets zur Laufzeit in meine Benutzeroberfläche. Um jede Box mit Widgets zur Laufzeit zu erstellen, erstelle ich einen neuen GtkBuilder, rufe add_from_string auf, übergebe den Text aus der .ui-Datei, die Glade erzeugt, und verwende dann das von get_object ("box1") zurückgegebene Objekt in der UI. Ich weiß, dass ich die Widgets mit Code erstellen konnte, aber für den Moment möchte ich die .ui-Dateien verwenden, die Glade erstellt. Es scheint jedoch ineffizient zu sein, ein neues GtkBuilder-Objekt und das vergeudete Window-Objekt für jede Box, die ich erstellen möchte, zu instanziieren. Gibt es eine effizientere Methode zum Laden von .ui-Dateien, ohne ein neues GtkWidget-Objekt und ein vergeudetes Window-Objekt zu erstellen?

Vielen Dank, Vance


4
2017-07-01 22:17


Ursprung




Antworten:


Wenn Sie Ihre GUI mit neuen Widgets füllen möchten, während Ihre App läuft, ist es völlig falsch, eine Reihe separater .ui-Dateien und GtkBuilder für sie zu erstellen. Es ist sehr einfach, ein einzelnes Widget aus dem Code zu erstellen.

Ich nehme an, Sie verwenden Python, da Sie Ihre Frage als markiert haben pygtk.

Sehen Sie sich ein einfaches Beispiel an:

from gi.repository import Gtk

und:

my_window = Gtk.Window()
my_button = Gtk.Button()
my_window.add(my_button)
my_window.show_all()

Nun, es wird nicht wirklich funktionieren, aber so können Sie neue Widgets erstellen. Weitere Informationen zu bestimmten Widgets finden Sie in diesem eleganten Tutorial / docs: http://python-gtk-3-tutorial.readthedocs.org/


2
2017-07-01 22:27



Danke, rafalcieslak. Ja, ich benutze Python. Ich lade Daten von einer Internet-API und zeige die Daten in den Widgets an. Daher muss ich die Widgets zur Laufzeit generieren. Ich möchte Glade verwenden, da es die Positionierung und das Setzen von Attributen von Widgets erleichtert; aber warum ist diese Verwendung "falsch"? - user72943
@ user72943: Während glade das Design vereinfachen soll, ist es nur für statische Interfaces gut, bei denen sich zur Laufzeit nichts ändert. Dies ist darauf zurückzuführen, dass GtkBuilder (wie Sie bemerkt haben) nicht effizient arbeitet, wenn Sie ihn jedes Mal, wenn Sie ein neues Widget benötigen, dazu auffordern, eine .ui-Datei zu verarbeiten ... Glade könnte hier hilfreich sein, um Widgets zu testen und zu entwerfen. Wenn Sie jedoch möchten, dass Ihre Anwendung effizient arbeitet (insbesondere wenn Sie zur Laufzeit viele GUI-Änderungen vornehmen müssen), müssen Sie Widgets auf "klassische Weise" erstellen. Glücklicherweise. es ist sehr einfach und du solltest keine Probleme damit haben. - Rafał Cieślak


Wenn Sie zur Laufzeit verschiedene Abschnitte in verschiedenen Bereichen verschieben möchten, können Sie eine Datei mit vielen Fenstern erstellen und diese erneut parieren. Für ein Beispiel überprüfe, was ich getan habe diese andere Frage.


2
2017-07-02 15:20