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

如何为Gtk.FileChooserDialog添加Gtk.CheckButton实现递归选择?

解决GtkFileChooserDialog添加复选框的警告问题

你遇到的警告是因为GtkFileChooserDialog是GtkBin的子类,这类容器只能容纳一个直接子部件,而对话框内部已经默认包含了一个GtkBox作为主布局容器,直接调用add()方法会试图替换这个默认容器,导致冲突。

正确的做法是获取对话框的内容区域容器,再将复选框添加到这个容器内部:

do_recursion = False

def enable_recurse(widget, data=None):
    nonlocal do_recursion
    do_recursion = widget.get_active()

choose_file_dialog = Gtk.FileChooserDialog(use_header_bar=use_header_bar,
                                           title=_(da_title),  # _( invokes GLib.dgettext
                                           action=Gtk.FileChooserAction.SELECT_FOLDER)
choose_file_dialog.add_button("_Cancel", Gtk.ResponseType.CANCEL)
choose_file_dialog.add_button("_OK", Gtk.ResponseType.OK)

check_box_1 = Gtk.CheckButton("_RECURSE")
check_box_1.connect("toggled", enable_recurse)

# 获取对话框的内容区域,将复选框添加到该容器中
content_area = choose_file_dialog.get_content_area()
content_area.add(check_box_1)

# 确保复选框被显示(部分场景下容器不会自动渲染新增部件)
check_box_1.show()

补充说明:

  • 对于Gtk 3版本,get_content_area()是获取对话框内部布局容器的标准方法,它返回的是一个GtkBox,支持添加多个子部件。
  • 如果使用Gtk 4,对话框的结构有所变化,需要通过choose_file_dialog.get_child()获取内部的GtkBox,再执行添加操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:00:46