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

GTK3+Glade中ScrolledWindow无法自动展开显示TreeView内容

问题原因

核心问题是Glade默认未配置ScrolledWindow及其内部组件的自动扩展约束:

  • ChatGPT生成的代码通过手动构建布局,默认给TreeView和ScrolledWindow设置了expand=True与fill=True属性,让容器能自动拉伸以适配TreeView的完整内容。
  • 而Glade创建的界面中,ScrolledWindow、内部Viewport、TreeView的默认Packing属性未开启扩展与填充,导致ScrolledWindow只会保持最小尺寸,无法自动展开显示TreeView全部内容,仅当内容超出当前窗口时才触发滚动条。
修正方法

方法一:在Glade编辑器中可视化调整

  1. 选中ScrolledWindow,切换到Packing属性面板:
    • 将它所在父容器(如Window、Box、Grid)的Expand和Fill选项都勾选为True,确保ScrolledWindow能随父容器扩展。
  2. 选中ScrolledWindow内部的Viewport(可通过Glade层级面板找到),同样在Packing面板勾选Expand和Fill为True。
  3. 选中TreeView,在Packing面板勾选Expand和Fill为True,让TreeView占满ScrolledWindow的可用空间。
  4. 调整ScrolledWindow的滚动策略:
    • 在ScrolledWindow属性面板中,将Horizontal Policy和Vertical Policy设为Automatic,实现内容少时自动展开显示全部内容、内容过多时自动显示滚动条的效果。

方法二:在Python代码中手动设置属性

如果Glade设置未生效,可在加载界面后手动配置扩展属性:

import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk

builder = Gtk.Builder()
builder.add_from_file("Example_Glade.glade")

# 获取组件对象(替换为你的实际ID)
scrolled_window = builder.get_object("scrolledwindow1")
tree_view = builder.get_object("treeview1")

# 配置ScrolledWindow在父容器中的扩展属性
parent = scrolled_window.get_parent()
if parent:
    parent.set_child_property(scrolled_window, "expand", True)
    parent.set_child_property(scrolled_window, "fill", True)

# 配置TreeView在Viewport中的扩展属性
viewport = scrolled_window.get_child()
if viewport and isinstance(viewport, Gtk.Viewport):
    viewport.set_child_property(tree_view, "expand", True)
    viewport.set_child_property(tree_view, "fill", True)

window = builder.get_object("window1")
window.connect("destroy", Gtk.main_quit)
window.show_all()
Gtk.main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:39:58