2016-04-26 16 views
0

Ich möchte ein anderes Widget in einem Ende eines GTK + 3 Texteingabefeld einzubetten, tun ein bisschen wie viele Browser mit Such- oder Protokollsicherheit „Chips“: Left hand side of Chromium search barEinbetten von anderen Widgets in einem GTK + Texteingabe

I weiß, dass ich ein Symbol auf einem Texteingabe mit

entry = Gtk.Entry() 
entry.set_icon_from_icon_name(Gtk.EntryIconPosition.PRIMARY, icon_name) 

setzen kann, auch wenn ich meine eigenen GdkPixbuf zu set_icon_from_pixbuf dies noch begrenzt ich passiere Größen auf dem icon, wenn ich einig beliebige Größe will (zumindest horizontal), je nach dem " Chip "Inhalt.

Ich habe auch versucht, den Text mit set_margin_left "shunt", aber dies bewegte die linke Kante der gesamten Eingabefeld über, anstatt den Text innerhalb der Box.

Was wäre eine effektive Möglichkeit, ein anderes GTK + -Widget (hoffentlich von beliebiger Komplexität, damit ich den Chip interaktiver gestalten kann) in einen Texteintrag einzubetten?

+1

Sie sollten sehen, wie es in [GdTaggedEntry] (https://git.gnome.org/browse/libgd/tree/libgd/gd-tagged-entry.c) von libgd getan wird. Dies wird in der neuen Suche in Nautilus 3.20 verwendet. Sie können auch versuchen, es zu verwenden, aber Sie müssten es zuerst kompilieren. Dafür könnte der Quellcode von [gnome-music] (https://git.gnome.org/browse/gnome-music/tree) interessant sein, da er ebenfalls libgd verwendet und in Python geschrieben ist. – elya5

+0

Suchen Sie noch Hilfe mit oder haben Sie es herausgefunden? – andlabs

Antwort

1

Haben Sie darüber nachgedacht, den Eintrag in einen Rahmen einzufügen und das Restyling so zu gestalten, dass es aussieht, als wäre es in einem Eintrag? Dann könnten Sie Standardcontainer verwenden, um alle Widgets neben die gewünschten Texteingabefelder zu setzen.

Der Nachteil ist, dass das Klicken auf Ihr "Symbol" den Eintrag nicht automatisch fokussiert, aber es macht diese Aktion vollständig konfigurierbar.

+0

Ich hatte darüber nachgedacht, und habe es noch nicht abgetan, aber "ein Widget" vorzutäuschen, das wie ein Texteintrag aussieht und sich anfühlt, wenn es links nur ein bisschen mehr Platz benötigt, erschien mir als Overkill. – Inductiveload

+2

Nicht wirklich; Fügen Sie einfach die 'entry' Klasse mit' gtk_style_context_add_class() 'hinzu. (Dies ist, was ebassi vorschlägt.) Ich könnte ein schnelles Beispielprogramm schreiben, um es später zu demonstrieren. – andlabs

2

GtkEntry ist kein Container, daher kann es keine untergeordneten Widgets haben.

Der geeignete Weg, um zu implementieren, was Sie auf dem Screenshot sehen, besteht darin, einen separaten Container zu verwenden und ihn entsprechend zu formatieren.

Verwandte Themen