为什么我的 SearchEntry 不会在其 SearchBar 内增长?
Why won't my SearchEntry grow inside its SearchBar?
我里面有一个Gtk.SearchBar
with a Gtk.SearchEntry
。我希望 SearchEntry 使用所有可用的(水平)space,因此我设置了 entry.props.hexpand = True
和 entry.props.halign = Gtk.Align.FILL
。但出于某种原因,SearchBar 不会授予它任何额外的 space,并且 Entry 保持很小。
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
window = Gtk.Window()
window.set_size_request(800, 300)
search_bar = Gtk.SearchBar()
search_bar.props.search_mode_enabled = True
search_bar.props.show_close_button = True
window.add(search_bar)
entry = Gtk.SearchEntry()
entry.props.hexpand = True
entry.props.halign = Gtk.Align.FILL
search_bar.add(entry)
window.show_all()
window.connect('destroy', Gtk.main_quit)
Gtk.main()
从关闭按钮的大小和位置可以看出,SearchBar 确实使用了 Window 中的所有 space。但是 SearchEntry 不会增长到超过其标准大小。为什么会这样,我该怎么办?
如果您正在寻找一个简单的解决方案,我必须提前为这个答案道歉。这很hacky,但它有效。首先,SearchBar
有一个相当复杂的子部件设置。它看起来像这样:
Gtk.SearchBar
| Gtk.Revealer
| | Gtk.Box (we will call this "main_box")
| | | Gtk.Box (we will call this "box1")
| | | Gtk.Box (we will call this "box2")
| | | | Gtk.SearchEntry
| | | Gtk.Box (we will call this "box3")
| | | | Gtk.Button
| | | | | Gtk.Image
问题的根源在于此处的许多小部件。您的解决方案正在运行,用于入门;该条目正在尽可能地扩展。我将解释问题及其解决方案,然后在最后显示代码。这些数字使您可以看到哪些代码行与哪些解决方案步骤相关。
条目的父框 box2
没有尽可能地扩展。因此,您还需要为其设置 props.hexpand
和 props.halign
。这部分有效,但在条目的左侧和右侧仍有一些额外的 space。
要解决这个问题,您需要从 main_box
中删除 box1
,因为它不需要存在。现在,条目一直扩展到左侧,但条目右侧和按钮之间仍有一些 space。
是由于 box3
在不该扩展的时候扩展造成的。因此,您需要将 box3
的 hexpand
设置为 False
。这应该可以解决问题;您的搜索栏条目应该按照您希望的方式展开,并且按钮应该占据较少的水平空间 space
(可选)如果你不想让按钮垂直展开,你可以把SearchBar
放在一个VBox
里,把那个VBox
在 window。请注意,您需要在 VBox
上调用 pack_start()
才能正常工作:vbox.pack_start(search_bar, False, False, 0)
.
这里是相关代码(省略第4步)。您可以在 search_bar.add(entry)
:
行下方添加此代码
# Get the correct children into the right variables
main_box = search_bar.get_children()[0].get_children()[0]
box1, box2, box3 = main_box.get_children()
# Fix the problem
box2.props.hexpand = True # See step 1
box2.props.halign = Gtk.Align.FILL # See step 1
main_box.remove(box1) # See step 2
box3.props.hexpand = False # See step 3
我里面有一个Gtk.SearchBar
with a Gtk.SearchEntry
。我希望 SearchEntry 使用所有可用的(水平)space,因此我设置了 entry.props.hexpand = True
和 entry.props.halign = Gtk.Align.FILL
。但出于某种原因,SearchBar 不会授予它任何额外的 space,并且 Entry 保持很小。
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk
window = Gtk.Window()
window.set_size_request(800, 300)
search_bar = Gtk.SearchBar()
search_bar.props.search_mode_enabled = True
search_bar.props.show_close_button = True
window.add(search_bar)
entry = Gtk.SearchEntry()
entry.props.hexpand = True
entry.props.halign = Gtk.Align.FILL
search_bar.add(entry)
window.show_all()
window.connect('destroy', Gtk.main_quit)
Gtk.main()
从关闭按钮的大小和位置可以看出,SearchBar 确实使用了 Window 中的所有 space。但是 SearchEntry 不会增长到超过其标准大小。为什么会这样,我该怎么办?
如果您正在寻找一个简单的解决方案,我必须提前为这个答案道歉。这很hacky,但它有效。首先,SearchBar
有一个相当复杂的子部件设置。它看起来像这样:
Gtk.SearchBar
| Gtk.Revealer
| | Gtk.Box (we will call this "main_box")
| | | Gtk.Box (we will call this "box1")
| | | Gtk.Box (we will call this "box2")
| | | | Gtk.SearchEntry
| | | Gtk.Box (we will call this "box3")
| | | | Gtk.Button
| | | | | Gtk.Image
问题的根源在于此处的许多小部件。您的解决方案正在运行,用于入门;该条目正在尽可能地扩展。我将解释问题及其解决方案,然后在最后显示代码。这些数字使您可以看到哪些代码行与哪些解决方案步骤相关。
条目的父框
box2
没有尽可能地扩展。因此,您还需要为其设置props.hexpand
和props.halign
。这部分有效,但在条目的左侧和右侧仍有一些额外的 space。要解决这个问题,您需要从
main_box
中删除box1
,因为它不需要存在。现在,条目一直扩展到左侧,但条目右侧和按钮之间仍有一些 space。是由于
box3
在不该扩展的时候扩展造成的。因此,您需要将box3
的hexpand
设置为False
。这应该可以解决问题;您的搜索栏条目应该按照您希望的方式展开,并且按钮应该占据较少的水平空间 space(可选)如果你不想让按钮垂直展开,你可以把
SearchBar
放在一个VBox
里,把那个VBox
在 window。请注意,您需要在VBox
上调用pack_start()
才能正常工作:vbox.pack_start(search_bar, False, False, 0)
.
这里是相关代码(省略第4步)。您可以在 search_bar.add(entry)
:
# Get the correct children into the right variables
main_box = search_bar.get_children()[0].get_children()[0]
box1, box2, box3 = main_box.get_children()
# Fix the problem
box2.props.hexpand = True # See step 1
box2.props.halign = Gtk.Align.FILL # See step 1
main_box.remove(box1) # See step 2
box3.props.hexpand = False # See step 3