GtkTextViewいけるかも

バルーンに使おうと思っているのはGtkTextViewです.

Gtk+2の時には色々試して上手くいかなかったのですが, Gtk+ 3.1.4(ChangeLog)でRGBAを使えるようになっているというので再挑戦しています.

背景を透明にして文字や画像をTextBufferに追加出来ることは確認しました. 🙂
意外なことに下のコードだけで(特別なことをしなくても)スクロールバーまで消えてくれています.


import cairo
from gi.repository import Gtk
from gi.repository import Gdk
from gi.repository import GdkPixbuf

def redraw(darea, cr):
cr.set_source_rgba(0, 0, 0, 0)
cr.set_operator(cairo.OPERATOR_SOURCE)
cr.paint()
del cr

def main():
path = ‘test.png’
pixbuf = GdkPixbuf.Pixbuf.new_from_file(path)
win = Gtk.Window()
win.set_app_paintable(True)
screen = win.get_screen()
visual = screen.get_rgba_visual()
win.set_visual(visual)
#win.set_focus_on_map(False)
#win.set_title(title)
#win.set_decorated(False)
#win.set_resizable(False)
win.connect(‘delete_event’, Gtk.main_quit)

darea = Gtk.DrawingArea()
darea.connect(‘draw’, redraw)
darea.set_size_request(320, 240)
darea.show()
sw = Gtk.ScrolledWindow()
sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.ALWAYS)
sw.show()
tv = Gtk.TextView()
tv.set_wrap_mode(Gtk.WrapMode.CHAR)
tv.override_background_color(Gtk.StateFlags.NORMAL, Gdk.RGBA(0, 0, 0, 0))
tv.show()
sw.add(tv)
tv.set_size_request(200, 150)
sw.set_size_request(200, 150)
fixed = Gtk.Fixed()
fixed.show()
win.add(fixed)
fixed.put(darea, 0, 0)
fixed.put(sw, 30, 40)
win.show_all()
tb = tv.get_buffer()
tb.set_text(‘test\n\n\n’)
it = tb.get_iter_at_mark(tb.get_insert())
tb.insert_pixbuf(it, pixbuf)

if __name__ == “__main__”:
main()
Gtk.main()

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です