[pygtk] Close button in notebook tab (without html... Sorry) [solved]
Sylvain Saleur
syeric1 at gmail.com
Sun May 6 23:42:52 WST 2007
> N. Volbers wrote:
>
> You can use notebook.remove(widget) to remove the proper notebook tab.
> Of course, then the callback needs to know, which widget it should
> remove. I suggest passing the frame to the create_custom_tab method:
>
> eventBox = self.create_custom_tab("Tab %d" % page_number, notebook,
> frame)
>
> Then, in create_custom_tab, you add the frame to the connect method:
>
> tabButton.connect('clicked',self.remove_book , notebook, frame)
>
> And finally, in the remove_book method, you know exactly which tab to
> remove:
>
> notebook.remove_page(frame)
>
>
>
Hi!
It works well!
Thank you very much!
Bests
Sylvain Saleur
Here the updated code for the next who want to know:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# notebook.py
import pygtk
pygtk.require('2.0')
import gtk
class NotebookExample:
def add_icon_to_button(self,button):
"Fonction pour ajouter un bouton fermer"
#création d'une boite horizontale
iconBox = gtk.HBox(False, 0)
#Création d'une image vide
image = gtk.Image()
#On récupère l'icone du bouton "fermer"
image.set_from_stock(gtk.STOCK_CLOSE,gtk.ICON_SIZE_MENU)
#On enlève le relief au bouton (donné en attribut)
gtk.Button.set_relief(button,gtk.RELIEF_NONE)
#On récupère les propriétés du bouton
settings = gtk.Widget.get_settings(button)
#On affecte à w et h les dimensions
(w,h) = gtk.icon_size_lookup_for_settings(settings,gtk.ICON_SIZE_MENU)
#On modifie ces dimensions
gtk.Widget.set_size_request(button, w + 4, h + 4)
image.show()
#On met l'image dans la boite
iconBox.pack_start(image, True, False, 0)
#On ajoute la boite dans le bouton
button.add(iconBox)
iconBox.show()
return
def create_custom_tab(self,text, notebook, frame):
"Crée une tab customisée avec un label et un bouton fermer"
#On crée une eventbox
eventBox = gtk.EventBox()
#On crée une boite horizontale
tabBox = gtk.HBox(False, 2)
#On crée un label "text" (text donné en attribut)
tabLabel = gtk.Label(text)
#On crée un bouton
tabButton=gtk.Button()
#On lui affecte la méthode remove_book
tabButton.connect('clicked',self.remove_book, notebook, frame)
#On ajoute l'image au bouton en utilisant la méthode add_icon_to_button
self.add_icon_to_button(tabButton)
eventBox.show()
tabButton.show()
tabLabel.show()
#On attache label et bouton à la boite
tabBox.pack_start(tabLabel, False)
tabBox.pack_start(tabButton, False)
tabBox.show_all()
#On ajoute la boite à l'eventbox
eventBox.add(tabBox)
return eventBox
def remove_book(self, button, notebook, frame):
"Fonction de suppression de page"
#On récupère la page courante
page = notebook.get_current_page()
#On la supprime
notebook.remove(frame)
# On actualise le widget
notebook.queue_draw_area(0,0,-1,-1)
def delete(self, widget, event=None):
gtk.main_quit()
return False
def __init__(self):
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.connect("delete_event", self.delete)
window.set_border_width(10)
#On crée un nouveau notebook
notebook = gtk.Notebook()
window.add(notebook)
notebook.show()
# On ajoute quelques pages
for i in range(5):
page_number = i + 1
frame = gtk.Frame("Frame %d" % page_number)
frame.set_border_width(10)
frame.set_size_request(100, 75)
frame.show()
label = gtk.Label("Dans la Frame %d" % page_number)
frame.add(label)
label.show()
eventBox = self.create_custom_tab("Tab %d" % page_number,
notebook, frame)
notebook.append_page(frame, eventBox)
# Page que nous verrons à l'ouverture (page 4)
notebook.set_current_page(3)
window.show()
def main():
gtk.main()
return 0
if __name__ == "__main__":
NotebookExample()
main()
More information about the pygtk
mailing list