如何为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
相关产品推荐
相关产品推荐

