2016-04-26 4 views
0

Я хотел бы, чтобы вставить еще один виджет в один конец + 3 текста поле ввода GTK, немного как многие браузеры делают с поиском или протокол безопасности «фишки»: Left hand side of Chromium search barВстраивание другие виджеты в записи GTK + текст

I знаю, что могу установить значок на ввод текста с

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

Даже если я передаю мои собственные GdkPixbuf к set_icon_from_pixbuf это все еще ограничивает меня значок размеров, когда я хочу некоторый произвольный размер (по крайней мере по горизонтали) в зависимости от " чип ".

Я также попытался «шунтировать» текст с помощью set_margin_left, но это переместило левый край всего окна ввода, а не текст в поле.

Что было бы эффективным способом встраивания какого-либо другого виджета GTK + (надеюсь, любой сложности, чтобы я мог сделать чип более интерактивным) в текстовой записи?

+1

Вы должны посмотреть, как это делается в [GdTaggedEntry] (https://git.gnome.org/browse/libgd/tree/libgd/gd-tagged-entry.c) из libgd. Это используется в новом поиске в nautilus 3.20. Вы также можете попробовать его использовать, но сначала вам придется скомпилировать его. Для этого исходный код [gnome-music] (https://git.gnome.org/browse/gnome-music/tree) может быть интересным, потому что он также использует libgd и написан на python. – elya5

+0

Вы все еще ищете помощь в этом или вы поняли это? – andlabs

ответ

1

Рассматривали ли вы помещение в рамку и рестайлинг, чтобы он выглядел так, будто он был внутри записи? Затем вы можете использовать стандартные контейнеры для размещения каких-либо виджетов рядом с требуемыми пространствами ввода текста.

Недостатком является то, что нажатие вашего «значка» не фокусирует запись автоматически, но делает это действие полностью настраиваемым.

+0

Я подумал об этом и еще не обесценил его, но «подделка» виджета, который выглядит и чувствует себя как текстовая запись, когда на самом деле ему просто нужно дополнительное пространство слева от текста, казалось, было излишним. – Inductiveload

+2

Не совсем; просто добавьте класс 'entry', используя' gtk_style_context_add_class() '. (Это то, что предлагает ebassi.) Я мог бы написать краткую примерную программу, чтобы продемонстрировать ее позже. – andlabs

2

GtkEntry не является контейнером, поэтому он не может иметь дочерние виджеты.

Соответствующий способ реализовать то, что вы видите на скриншоте, - использовать отдельный контейнер и соответствующим образом подобрать его.