15

或“如何向 GtkTextView 添加可见(细)边框”?有可能吗?

先感谢您。

4

4 回答 4

9

多年后......但在网上搜索仍然没有很好地回答这个问题。

解决方案非常简单:只需创建一个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 )
于 2017-06-11T14:57:24.067 回答
2

大约9年半之后……

我将给出一个与语言无关的答案。

首先,添加一个GtkScrolledWindow,它将启用滚动。现在添加你的GtkTextView. 然后将阴影类型设置为非无。它会在您的GtkTextView.

于 2020-11-23T12:12:12.083 回答
0

使用 Glade 编辑器:

  • 在林间空地编辑器中选择您的ScrolledWindow (您已将TextView打包到ScrolledWindow中,不是吗?:),如果没有 - 选择您的TextView)。
  • 选择小部件属性->通用选项卡。
  • 查找并根据自己的喜好调整边框宽度属性。

从代码:

容器小部件的调用set_border_width(width)方法(ScrolledWindowTextView

请注意,在任何情况下,TextArea都不会完全像Entry,它取决于所使用的 gtk+ 主题。

于 2011-06-06T11:35:44.933 回答
0

使用gtk.ScrolledWindow.set_shadow_type(type=gtk.SHADOW_ETCHED_IN)会改善外观,但不会匹配gtk.Entry.

如果放置在窗口或窗格中,scolled 窗口或 textview 的边框不是问题,但如果目标是创建一个具有多行输入字段的表单,它就会变得难看。这是一个可以解决问题的黑客...

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()

需要注意的是滚动条变得不可见;可以选择它,并且滚动照常工作。如果要在字段中输入的数据往往不使用滚动,这可能是一个小问题。

于 2013-07-31T18:00:00.840 回答