logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).

#1 Suivi du Wiki et des Projets Git » [pygtk] Comment faire un notebook avec bouton "fermer" » 02-06-2007 01:30:19

syeric
Réponses : 28
Pour les retours de https://debian-facile.org/doc:programma … utonfermer


Salut !

Alors j'ai mis un moment à le trouver ! Donc, autant que ça serve pour le prochain smile

Voici le script :

#!/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 vous obtenez :

qtp7p3ji.png

Voilà, si ça peut servir à quelqu'un ;-) C'est loin d'être du haut niveau mais desfois, les choses les plus simples occasionnent des heures de recherche...

A+

Syeric

Pied de page des forums

Propulsé par FluxBB