#!/usr/bin/env python import gobject, gtk import sys applystyle = False class NotebookTabLabel(gtk.HBox): def __init__(self, title, buttonname): gtk.HBox.__init__(self, False, 4) self._label = gtk.Label() self.pack_start(self._label, True, True, 0) self._button = gtk.Button() self._button.set_relief(gtk.RELIEF_NONE) self._button.set_focus_on_click(False) if buttonname != "": self._button.set_name(buttonname) self._button.set_tooltip_text("Close Tab") icon = gtk.image_new_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) self._button.add(icon) self.pack_start(self._button, False, False, 0) self.connect("style-set", self.on_style_set) self.show_all() def on_style_set(self, widget, prevstyle): if applystyle: x, y = gtk.icon_size_lookup_for_settings( self._button.get_settings(), gtk.ICON_SIZE_MENU) self._button.set_size_request(x + 2,y + 2) if __name__ == "__main__": win = gtk.Window() win.set_default_size(500,300) win.connect("delete-event", lambda widget, evt: gtk.main_quit()) win.connect("destroy", lambda widget: gtk.main_quit()) if len(sys.argv) > 1 and sys.argv[1] == "apply-style": applystyle = True gtk.rc_parse_string(""" style "tab-close-button-style" { GtkWidget::focus-padding = 0 GtkWidget::focus-line-width = 0 xthickness = 0 ythickness = 0 } widget "*.tab-close-button" style "tab-close-button-style" """) nt = gtk.Notebook() buttonnames = ['tab-close-button', 'foobar', ''] for i in range(0,5): buttonname = buttonnames[i%len(buttonnames)] label = NotebookTabLabel("hello", buttonname) page = gtk.Label("HELLO") nt.append_page(page) nt.set_tab_label(page, label) nt.set_tab_label_packing(page, True, True,gtk.PACK_START) win.add(nt) win.show_all() gtk.main()