So binden Sie den Inhalt eines GtkAboutDialogs in ein GtkNotebook-Widget ein

7

Ich schreibe eine Python-App, die auf Registerkarten basiert, und ich möchte nicht, dass sie zusätzliche Popup-Dialoge enthält.

Ich möchte die Gtk.AboutDialogFunktionalität nutzen, möchte aber nicht, dass sie als separates Fenster angezeigt wird. Ich möchte vielmehr, dass es in eine der Registerkarten von mir eingebettet wird Gtk.Notebook(die ich mit Glade erstellt habe).

Ich konnte keinen offensichtlichen Weg finden, dies zu tun. Hat jemand irgendwelche Hinweise?

David Planella
quelle
Wenn diese Frage nicht Ubuntu-spezifisch ist, sollte sie möglicherweise auf StackOverflow migriert werden .
Eliah Kagan
3
Die Frage bezieht sich auf das Erstellen von Anwendungen für Ubuntu, ebenso wie alle im application-developmentTag. Wir empfehlen und empfehlen die Verwendung von Askubuntu als Ressource für die Unterstützung von und durch App-Entwickler developer.ubuntu.com/community
David Planella

Antworten:

6

Sie können den Inhaltsbereich ( GtkVBox) von GtkDialogeinem anderen in einen anderen verschieben GtkContainerund dann GtkNotebookmit der Methode gtk.Widget.reparent () an - anhängen .

about = Gtk.AboutDialog()
about.set_program_name ("Application")
about.set_copyright ("Author")

box = Gtk.VBox ()
about.vbox.reparent (box)
notebook.append_page (box, Gtk.Label("About"))
about.destroy ()

Mit der in Glade erstellten Schnittstelle müssen Sie für diese Lösung einen einfachen Trick ausführen. Erstellen Sie eine Registerkarte "Info" im Notizbuch mit angehängtem GtkBoxText (mit der ID "about_box"). Dann können Sie so etwas tun:

box = builder.get_object ("about_box")
about.vbox.reparent (box)

In einigen Gründen enthält der GtkAboutDialog Inhaltsbereich von Glade auch GtkButtonBox. Wenn Sie diese Schaltflächen nicht benötigen, zerstören Sie sie einfach:

about.action_area.destroy()

Wenn Sie nur die Schaltfläche "Credits" ohne die Schaltfläche "Schließen" möchten, gehen Sie wie folgt vor:

close_button = about.get_widget_for_response(Gtk.ResponseType.CANCEL)
close_button.destroy()
Damian
quelle
Vielen Dank! Irgendwie scheint dies nicht zu funktionieren, da der Tab anscheinend nicht hinzugefügt wird. Ich bin mir nicht sicher, ob es daran liegt, dass ich das Notizbuch ursprünglich mit Glade erstellt habe und dann versuche, die Registerkarte im Code hinzuzufügen. Ich habe es noch nicht herausgefunden.
David Planella
1
Nach dem Testen kann ich bestätigen, dass der obige Code für alle Gtk.Notebookim Code erstellten Codes funktioniert. Wenn das Notebook jedoch mit Glade erstellt wurde, wird der neue Tab nicht angehängt.
David Planella
Das ist großartig, danke für das Follow-up! Das funktioniert jetzt gut.
David Planella
Eine letzte Frage: Ich kann das gesamte action_areaWidget loswerden , aber gibt es eine Möglichkeit, nur das Widget loszuwerden close_button? Das Feld, das jetzt in eine Registerkarte eingebettet ist, macht die Schaltfläche unnötig.
David Planella