Vous n'êtes pas identifié(e).
L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT →
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
doc:programmation:python:boutonfermer [26/10/2013 14:57] MicP Ajout d'un lien vers le forum |
doc:programmation:python:boutonfermer [25/04/2023 21:50] (Version actuelle) bendia [Comment faire un notebook avec bouton "fermer"] Tag obsolète (GTK2.) et python 2 |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Comment faire un notebook avec bouton "fermer" ====== | ====== Comment faire un notebook avec bouton "fermer" ====== | ||
- | * Le retour sur le forum est ici : [[http://debian-facile.org/viewtopic.php?id=31 | Lien vers le forum concernant ce tuto]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
- | --- //Script créé par Syeric// | + | * Objet : Script Python - Comment faire un notebook avec bouton "fermer" |
+ | * Niveau requis :{{tag>débutant avisé}} | ||
+ | * Commentaires : // programmer un bouton "fermer" en python avec la bibliothèque graphique GTK // | ||
+ | * Débutant, à savoir : [[:doc:systeme:commandes:le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !]] :-) | ||
+ | * Suivi : {{tag>obsolète}} | ||
+ | * Création par [[user>syeric]] le 02/06/2007 | ||
+ | * Testé par [[user>paskal]] le 25/10/2015 | ||
+ | * Commentaires sur le forum : [[http://debian-facile.org/viewtopic.php?id=31 |C'est ici]]((N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !)) | ||
+ | ===== Présentation ===== | ||
Salut ! | Salut ! | ||
Ligne 11: | Ligne 18: | ||
Voici le script : | Voici le script : | ||
- | #!/usr/bin/env python | + | <file python notebook.py>#!/usr/bin/env python |
- | # -*- coding:utf-8 -*- | + | # -*- coding:utf-8 -*- |
- | # notebook.py | + | |
- | import pygtk | + | # notebook.py |
- | pygtk.require('2.0') | + | |
- | import gtk | + | import pygtk |
- | class NotebookExample: | + | pygtk.require('2.0') |
- | def add_icon_to_button(self,button): | + | import gtk |
- | "Fonction pour ajouter un bouton fermer" | + | |
- | #création d'une boite horizontale | + | class NotebookExample: |
- | iconBox = gtk.HBox(False, 0) | + | |
- | #Création d'une image vide | + | ## fonction pour ajouter un bouton fermer |
+ | def add_icon_to_button(self,button): | ||
+ | # création d'une boite horizontale | ||
+ | iconBox = gtk.HBox(False, 0) | ||
+ | # création d'une image vide | ||
image = gtk.Image() | image = gtk.Image() | ||
- | #On récupère l'icone du bouton "fermer" | + | # on récupère l'icone du bouton "fermer" |
image.set_from_stock(gtk.STOCK_CLOSE,gtk.ICON_SIZE_MENU) | image.set_from_stock(gtk.STOCK_CLOSE,gtk.ICON_SIZE_MENU) | ||
- | #On enlève le relief au bouton (donné en attribut) | + | # on enlève le relief au bouton (donné en attribut) |
gtk.Button.set_relief(button,gtk.RELIEF_NONE) | gtk.Button.set_relief(button,gtk.RELIEF_NONE) | ||
- | #On récupère les propriétés du bouton | + | # on récupère les propriétés du bouton |
settings = gtk.Widget.get_settings(button) | settings = gtk.Widget.get_settings(button) | ||
- | #On affecte à w et h les dimensions | + | # on affecte à w et h les dimensions |
(w,h) = gtk.icon_size_lookup_for_settings(settings,gtk.ICON_SIZE_MENU) | (w,h) = gtk.icon_size_lookup_for_settings(settings,gtk.ICON_SIZE_MENU) | ||
- | #On modifie ces dimensions | + | # on modifie ces dimensions |
gtk.Widget.set_size_request(button, w + 4, h + 4) | gtk.Widget.set_size_request(button, w + 4, h + 4) | ||
image.show() | image.show() | ||
- | #On met l'image dans la boite | + | # on met l'image dans la boite |
iconBox.pack_start(image, True, False, 0) | iconBox.pack_start(image, True, False, 0) | ||
- | #On ajoute la boite dans le bouton | + | # on ajoute la boite dans le bouton |
button.add(iconBox) | button.add(iconBox) | ||
iconBox.show() | iconBox.show() | ||
- | return | + | return |
+ | |||
+ | |||
+ | ## crée une tab customisée avec un label et un bouton fermer | ||
def create_custom_tab(self,text, notebook, frame): | 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 |
- | #On crée une eventbox | + | |
eventBox = gtk.EventBox() | eventBox = gtk.EventBox() | ||
- | #On crée une boite horizontale | + | # on crée une boite horizontale |
tabBox = gtk.HBox(False, 2) | tabBox = gtk.HBox(False, 2) | ||
- | #On crée un label "text" (text donné en attribut) | + | # on crée un label "text" (text donné en attribut) |
tabLabel = gtk.Label(text) | tabLabel = gtk.Label(text) | ||
- | #On crée un bouton | + | # on crée un bouton |
- | tabButton=gtk.Button() | + | tabButton = gtk.Button() |
- | #On lui affecte la méthode remove_book | + | # on lui affecte la méthode remove_book |
tabButton.connect('clicked',self.remove_book, notebook, frame) | tabButton.connect('clicked',self.remove_book, notebook, frame) | ||
- | #On ajoute l'image au bouton en utilisant la méthode add_icon_to_button | + | # on ajoute l'image au bouton en utilisant la méthode add_icon_to_button |
- | self.add_icon_to_button(tabButton) | + | self.add_icon_to_button(tabButton) |
eventBox.show() | eventBox.show() | ||
tabButton.show() | tabButton.show() | ||
tabLabel.show() | tabLabel.show() | ||
- | #On attache label et bouton à la boite | + | # on attache label et bouton à la boite |
- | tabBox.pack_start(tabLabel, False) | + | tabBox.pack_start(tabLabel, False) |
tabBox.pack_start(tabButton, False) | tabBox.pack_start(tabButton, False) | ||
tabBox.show_all() | tabBox.show_all() | ||
- | #On ajoute la boite à l'eventbox | + | # on ajoute la boite à l'eventbox |
eventBox.add(tabBox) | eventBox.add(tabBox) | ||
- | return eventBox | + | return eventBox |
+ | |||
+ | |||
+ | ## fonction de suppression de page | ||
def remove_book(self, button, notebook, frame): | 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. |
- | #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) | notebook.remove(frame) | ||
- | # On actualise le widget | + | # on actualise le widget |
notebook.queue_draw_area(0,0,-1,-1) | notebook.queue_draw_area(0,0,-1,-1) | ||
+ | |||
def delete(self, widget, event=None): | def delete(self, widget, event=None): | ||
gtk.main_quit() | gtk.main_quit() | ||
return False | return False | ||
+ | |||
def __init__(self): | def __init__(self): | ||
window = gtk.Window(gtk.WINDOW_TOPLEVEL) | window = gtk.Window(gtk.WINDOW_TOPLEVEL) | ||
window.connect("delete_event", self.delete) | window.connect("delete_event", self.delete) | ||
window.set_border_width(10) | window.set_border_width(10) | ||
- | #On crée un nouveau notebook | + | |
+ | # on crée un nouveau notebook | ||
notebook = gtk.Notebook() | notebook = gtk.Notebook() | ||
window.add(notebook) | window.add(notebook) | ||
notebook.show() | notebook.show() | ||
- | # On ajoute quelques pages | + | |
+ | # on ajoute quelques pages | ||
for i in range(5): | for i in range(5): | ||
page_number = i + 1 | page_number = i + 1 | ||
Ligne 91: | Ligne 110: | ||
label = gtk.Label("Dans la Frame %d" % page_number) | label = gtk.Label("Dans la Frame %d" % page_number) | ||
frame.add(label) | frame.add(label) | ||
- | label.show() | + | label.show() |
+ | |||
eventBox = self.create_custom_tab("Tab %d" % page_number, notebook, frame) | eventBox = self.create_custom_tab("Tab %d" % page_number, notebook, frame) | ||
notebook.append_page(frame, eventBox) | notebook.append_page(frame, eventBox) | ||
- | # Page que nous verrons à l'ouverture (page 4) | + | # page que nous verrons à l'ouverture (page 4) |
notebook.set_current_page(3) | notebook.set_current_page(3) | ||
window.show() | window.show() | ||
- | def main(): | + | |
+ | def main(): | ||
gtk.main() | gtk.main() | ||
- | return | + | return 0 |
- | if __name__ == "__main__": | + | |
+ | if __name__ == "__main__": | ||
NotebookExample() | NotebookExample() | ||
- | main() | + | |
+ | main()</file> | ||
Et vous obtenez : | Et vous obtenez : | ||
- | {{http://images.debian-facile.org/manuel/boutonfermer.png|}} | + | {{/manuel/boutonfermer.png|}} |