You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gtk.TextView叠加Gtk.FlowBox后仅显示TextView的问题

解决Gtk.Overlay中TextView遮挡FlowBox的问题

问题原因

Gtk.TextView默认使用不透明背景,会完全覆盖下方的Gtk.FlowBox,导致底层控件无法显示。

解决方法

有两种常用修复方式,可根据需求选择:

方法1:设置TextView背景透明

通过样式修改将TextView背景设为透明,即可看到下方的FlowBox:

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)

# 给TextView设置透明背景
css_provider = Gtk.CssProvider()
css_provider.load_from_data(b"textview { background-color: transparent; }")
textview.get_style_context().add_provider(css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

overlay.add_overlay(textview)

window.show_all()
Gtk.main()

方法2:启用Overlay穿透属性

取消注释代码中的overlay.set_overlay_pass_through(textview, True),同时可调整TextView的大小或位置,避免完全覆盖底层控件:

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)

# 限制TextView大小,避免完全覆盖底层控件
textview.set_size_request(100, 50)
# 启用穿透属性,让底层控件能接收交互事件
overlay.set_overlay_pass_through(textview, True)
overlay.add_overlay(textview)

window.show_all()
Gtk.main()

补充说明

  • 方法1适合需要TextView保持原有大小,但要显示底层内容的场景
  • 方法2不仅能显示底层内容,还能让底层控件响应鼠标交互(比如点击按钮),适合需要交互操作的场景

内容的提问来源于stack exchange,提问作者Olumide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:42:16