Extending From GtkBin
I'm trying to make a custom widget that resembles the 'quick search' entry that Gtk uses on all TreeView-like widgets. Here's a simplified example of my initial idea: from gi.repos
Solution 1:
For some reason, Gtk.Bin
is not allocating space to its child. If you implement the do_size_allocate
virtual method then it works. Why the default implementation is not being called, I have no idea.
from gi.repository import Gtk, Gdk
class QuickSearch(Gtk.Bin):
def __init__(self, *args, **kwargs):
super(QuickSearch, self).__init__(*args, **kwargs)
self.add(Gtk.Entry())
def do_size_allocate(self, allocation):
self.set_allocation(allocation)
child_allocation = Gdk.Rectangle()
border_width = self.get_border_width()
child_allocation.x = allocation.x + border_width
child_allocation.y = allocation.y + border_width
child_allocation.width = allocation.width - 2 * border_width
child_allocation.height = allocation.height - 2 * border_width
self.get_child().size_allocate(child_allocation)
win = Gtk.Window()
win.connect("delete-event", Gtk.main_quit)
search = QuickSearch()
win.add(search)
win.show_all()
Gtk.main()
However, I think inheriting from a Gtk.Frame
is more appropriate for your purpose; it is a one-child container with a styleable border around it, which is what you want and more. And its size allocate method works.
Post a Comment for "Extending From GtkBin"