I'm trying to overlay a Gtk.TextView on a Gtk.FlowBox, as shown below.
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
window = Gtk.Window()
window.set_default_size(200, 200)
window.connect("destroy", Gtk.main_quit)
overlay = Gtk.Overlay()
window.add(overlay)
flowbox = Gtk.FlowBox()
for _ in range(4):
flowbox.add(Gtk.Button.new_with_label("Button"))
overlay.add(flowbox)
textbuffer = Gtk.TextBuffer()
textbuffer.set_text("Text TEXT")
textview = Gtk.TextView.new_with_buffer(textbuffer)
overlay.add_overlay(textview)
#overlay.set_overlay_pass_through(textview, True)
window.show_all()
Gtk.main()
Unfortunately all I can see is the TextView.
Here's the solution I came up with. (It is an amalgam of many other answers the links to which I no longer have and therefore can no longer credit.)
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, Gdk
CSS_DATA = b"""
#tv
{
background-color: rgba(1, 1, 1, 0);
}
#tv text
{
background-color: rgba(1, 1, 1, 0);
}
"""
window = Gtk.Window()
window.connect("destroy", Gtk.main_quit)
style_provider = Gtk.CssProvider()
style_provider.load_from_data(CSS_DATA)
Gtk.StyleContext.add_provider_for_screen(
Gdk.Screen.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
overlay = Gtk.Overlay()
window.add(overlay)
flowbox = Gtk.FlowBox()
for _ in range(4):
flowbox.add(Gtk.Button.new_with_label("Button"))
overlay.add(flowbox)
vbox = Gtk.VBox()
textbuffer = Gtk.TextBuffer()
textbuffer.set_text("Text TEXT")
textview = Gtk.TextView.new_with_buffer(textbuffer)
textview.set_name("tv")
textview.set_halign(Gtk.Align.CENTER)
textview.set_justification(Gtk.Justification.CENTER)
textview.set_wrap_mode(Gtk.WrapMode.WORD)
textview.set_size_request(100, -1)
vbox.pack_start(textview, True, False, 0)
overlay.add_overlay(vbox)
window.show_all()
Gtk.main()