Как сделать GtkTextView похожим на GtkEntry? - PullRequest
10 голосов
/ 05 июня 2011

Или «Как добавить видимую (тонкую) границу в GtkTextView»?Это когда-нибудь возможно?

Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 11 июня 2017

Спустя годы ... но поиск в Интернете все еще не дает хороших ответов на этот вопрос.

Решение довольно простое: просто создайте GtkFrame и добавьте GtkScrolledWindow, содержащий GtkTextViewВот пример кода на Python:

frame = Gtk.Frame()
scroll = Gtk.ScrolledWindow()
scroll.set_hexpand( True )
scroll.set_border_width( 3 )
textview = Gtk.TextView()
scroll.add( textview )
frame.add( scroll )
0 голосов
/ 31 июля 2013

Использование gtk.ScrolledWindow.set_shadow_type(type=gtk.SHADOW_ETCHED_IN) улучшит внешний вид, но не будет соответствовать стилю gtk.Entry.

Граница прокручиваемого окна или текстового представления не является проблемой, если помещена в окно или панель, ноесли цель состоит в том, чтобы создать форму с многострочным полем ввода, она становится безобразной.Вот хак, который может добиться цели ...

import gtk

# create an entry widget that we use for appearances only
e=gtk.Entry()
e.set_size_request(width=250, height=150)

# create a texview and accompaying label
lbl = gtk.Label(str="Comments: ")
lbl.set_alignment(xalign=1, yalign=0)
field = gtk.TextView(buffer=None)
field.set_wrap_mode(wrap_mode=gtk.WRAP_WORD) # or gtk.WRAP_CHAR

# we need a scroll window
sw = gtk.ScrolledWindow(hadjustment=None, vadjustment=None)
sw.set_border_width(border_width=4)
sw.set_size_request(width=250, height=150)
sw.set_policy(hscrollbar_policy=gtk.POLICY_NEVER, vscrollbar_policy=gtk.POLICY_AUTOMATIC)
sw.add(field)

# create more widgets as needed for form here...
lbl2 = gtk.Label(str="email: ")
lbl2.set_alignment(xalign=1, yalign=0)
field2 = gtk.Entry()

# put everything in a table so the fields and labels are all aligned 
tbl = gtk.Table(rows=1, columns=2, homogeneous=False)
tbl.attach(lbl, left_attach=0, right_attach=1, top_attach=0, bottom_attach=1, xoptions=gtk.FILL|gtk.SHRINK, yoptions=gtk.FILL, xpadding=0, ypadding=0)
# sw and e must be attached in this order, the reverse will not work
tbl.attach(sw, left_attach=1, right_attach=2, top_attach=0, bottom_attach=1, xoptions=gtk.FILL|gtk.SHRINK, yoptions=gtk.FILL, xpadding=0, ypadding=0)
tbl.attach(e, left_attach=1, right_attach=2, top_attach=0, bottom_attach=1, xoptions=gtk.FILL|gtk.SHRINK, yoptions=gtk.FILL, xpadding=0, ypadding=0)
# comment out previous line to see difference

# attach other widgets here...
tbl.attach(lbl2, left_attach=0, right_attach=1, top_attach=1, bottom_attach=2, xoptions=gtk.FILL|gtk.SHRINK, yoptions=gtk.FILL, xpadding=0, ypadding=0)
tbl.attach(field2, left_attach=1, right_attach=2, top_attach=1, bottom_attach=2, xoptions=gtk.FILL|gtk.SHRINK, yoptions=gtk.FILL, xpadding=0, ypadding=0)

# display it!
window = gtk.Window()
window.set_default_size(350, 200)
window.connect("destroy", lambda w: gtk.main_quit())
window.add(tbl)
window.show_all()

gtk.main()

Предостережение в том, что полосы прокрутки становятся невидимыми;его можно выбрать, и прокрутка работает как обычно.Это может быть незначительной проблемой, если данные, вводимые в поле, не используют прокрутку.

0 голосов
/ 06 июня 2011

Использование редактора Glade:

  • В редакторе Glade выберите ScrolledWindow (вы упаковали TextView в ScrolledWindow , гавань 'не так ли? :), если нет - выберите TextView ).
  • Выбрать Виджет Porperties -> Общий вкладка.
  • Найдите и настройте Ширина границы свойство по своему вкусу.

Из кода:

вызов set_border_width(width) метод контейнерного виджета ( ScrolledWindow или TextView )

Обратите внимание, что в любом случае TextArea будетне совсем похоже на Entry и зависит от используемой темы gtk +.

...