Нужен кастомный виджет состоящий из парочки примитивных виджетов. Решил сделать этот виджет потомком GtkBin, в него поместить GtkHBox, а там уже расположить требуемые примитивы.
Однако почему-то новый виджет не показывается. Код ниже. Где косяк и как исправить? Спасибо.
P.S. Если наследоваться от HBox, то все прекрасно показывается и работает — но по логике вещей HBox имеет совершенно другую семантику.
import gobject
import pygtk
pygtk.require20()
import gtk as g
class InputWidget(g.Bin):
def __init__(self, *args):
g.Bin.__init__(self, *args)
self.__build()
def __build(self):
self.__mainLayout = g.HBox()
self.add(self.__mainLayout)
self.__stateLabel = g.Label("<S>")
self.__expandLabel = g.Label("<E>")
self.__inputEntry = g.Entry()
self.__mainLayout.pack_start(self.__stateLabel, False, False, 15)
self.__mainLayout.pack_start(self.__inputEntry, True, True, 0)
self.__mainLayout.pack_end(self.__expandLabel, False, False, 15)
gobject.type_register(InputWidget)
def main():
w = g.Window(g.WINDOW_TOPLEVEL)
w.connect("destroy", g.main_quit)
w.connect("delete_event", lambda x, y: False)
w.set_size_request(500, 200)
w.set_border_width(10)
main_layout = g.VBox(True)
main_frame = g.Frame("Main Frame")
w.add(main_layout)
main_layout.add(main_frame)
frame_layout = g.VBox(True)
main_frame.add(frame_layout)
# This code works:
#label = g.Label("simple label")
#frame_layout.pack_start(label, True, True, 0)
# But this do not:
input = InputWidget()
frame_layout.pack_start(input, True, True, 0)
w.show_all()
g.main()