または「GtkTextView に見える (薄い) 境界線を追加する方法」? それは可能ですか?
前もって感謝します。
それから約9年半…。
言語に依存しない回答をします。
最初に を追加するGtkScrolledWindow
と、スクロールが有効になります。を追加しますGtkTextView
。次に、影の種類を none 以外に設定します。の周りに境界線が表示されますGtkTextView
。
Glade エディターの使用:
コードから:
set_border_width(width)
コンテナ ウィジェットのメソッドを呼び出す( ScrolledWindowまたはTextViewのいずれか)
いずれにせよ、 TextAreaはEntryのようには見えず、使用されている gtk+ テーマに依存することに注意してください。
を使用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()
注意点は、スクロールバーが見えなくなることです。選択でき、スクロールは通常どおり機能します。フィールドに入力されるデータがスクロールを使用しない傾向がある場合、これは小さな問題になる可能性があります。