Notebook avec bouton fermer pygtk
Par syeric, mercredi 16 mai 2007 à 18:22 :: Python :: #4 :: rss
Salut !
Python est un langage que j'affectionne particulièrement. La syntaxe n'est pas très lourde, c'est orienté objet et ça s'avère très puissant. De plus, il est portable sous windows et mac. Associé à la bibliothèque graphique pygtk, on peut faire des trucs très sympa :)
J'ai galèré un bon moment avant d'arriver à faire un notebook (plusieurs onglets dans la même fenêtre) avec un bouton "fermer" dans l'onglet. Je donne donc la solution si il y en a que ça intéresse ;-)
#!/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 supprime la page. Le secret, c'est de donner comme argument le widget enfant de la page, ici un cadre frame. 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()
Et voilà ! A l'exécution de ce script, vous obtiendrez ça :
A bientôt !
Sylvain
Commentaires
1. Le mercredi 16 décembre 2009 à 14:55, par Vobseshompimb
2. Le jeudi 17 décembre 2009 à 01:23, par claude99
3. Le vendredi 15 janvier 2010 à 04:52, par saymay
Ajouter un commentaire