IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

créer un petit éditeur perso


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut créer un petit éditeur perso
    Bonjour,
    Je suis toujours débutant en python et j'essaie de créer un petit éditeur de texte personnel pour y joindre plus tard (via les menus déroulants) des modules que j'ai déjà créés en Python
    Pour l'instant, j'arrive à faire çà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
    import tkinter as Tk
    import tkinter.filedialog as tkFileDialog
     
    def Affiche():
        fd=tkFileDialog.askopenfilename(filetypes = [("Fichiers Tex","*.tex"),("Fichiers Python","*.py"),("Tous", "*")])
        f=open(fd,"r")
        texte_fichier=f.read()
        f.close()
        nom_fichier=str(fd)
        ##Remplissage du menu windows
        menuWindows.add_command(label=str(fd), command=activer_fichier(str(fd)))
     
        ## Déclaration des différents widgets
        f1 = Tk.Frame(root,bg ='blue', bd =5)
        s1 = Tk.Scrollbar(f1, orient=Tk.VERTICAL)
        texte1 = Tk.Text(f1, wrap=Tk.WORD,width =150, height =10)
     
        ## association du déplacement de la glissière des scrollbar avec la position visible dans 
        ## le widget Text et inversement.              
        s1.config(command = texte1.yview)
        texte1.config(yscrollcommand = s1.set)
     
        ## Placement du widget Text et des Scrollbar associés
        texte1.grid(column=0, row=0)
        texte1.insert(Tk.INSERT,texte_fichier)
     
        s1.grid(column=1, row=0, sticky=Tk.S+Tk.N)
        f1.pack()
     
     
    def activer_fichier(nom_fichier):
        print("ne rien faire pour l'instant")
     
    ## Fenêtre principale
    root = Tk.Tk()   
    root.title="Essai de menus déroulants"
     
    ## Barre de menu parent
     
    mainmenu = Tk.Menu(root)  
     
    ## Menu fils menuExample
    menuExample = Tk.Menu(mainmenu)  
    menuExample.add_command(label="Ouvrir",underline=0, command=Affiche, foreground ='red', background ='yellow',
    font =('Comic Sans MS', 11))
    ## Ajout d'une séparation
    menuExample.add_separator()
    ##Ajout d'une commande
    menuExample.add_command(label="Quitter", underline =0, command=root.destroy)
     
    ## Menu Fils
    menuWindows = Tk.Menu(mainmenu) 
     
    mainmenu.add_cascade(label = "Fichier", underline =0, foreground ='red', background ='yellow',
    font =('Comic Sans MS', 15),menu=menuExample)
    mainmenu.add_cascade(label = "Windows", foreground ='red', background ='yellow', underline =0, menu=menuWindows)
     
    root.configure(menu = mainmenu)
    root.wm_state(newstate="zoomed")
     
    root.mainloop()
    Plusieurs questions:
    1. Comment se fait-il que le title "Essai de menus déroulants" ne s'affiche pas?
    2. Je souhaite pouvoir ouvrir plusieurs fichiers. Par la fonction <<affiche>>, le pg créé une frame par fichier ouvert et lu. Je souhaiterais (comme beaucoup d'éditeurs de texte le proposent) qu'il y ait une feuille par fichier ouvert et que les feuilles soient superposées en profondeur (avec un onglet serait encore mieux), au lieu d'une superposition verticale comme actuellement. Comment est-il possible de faire çà?
    3. Je n'arrive pas à modifier le format de la barre de menu principale <<mainmenu>>

    Merci pour vos réponses.

    Gabriel

    PS : par ailleurs, j'ai essayé de voir comment était construit l'éditeur Idle dans ...Lib\idlelib ... pour essayer de récupérer des commandes usuelles, mais j'ai eu du mal à trouver les commandes principales.

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    1) root.title("Essai de menus déroulants")

    2) On appelle cela un Notebook. Vous pouvez utiliser celui de ttk.

    3) Pas compris: Qu'entendez vous par modifier le format ? Faite un print (Tk.Menu), cela vous donneras les méthodes disponibles.

    @+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut
    Merci pour la réponse. J'ai lu (rapidement) ttk et effectivement çà à l'air de répondre à mon besoin.
    Je vais donc essayer.

    Merci
    Gabriel

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut Reprise
    Bonjour,
    Donc j'ai utilisé l'extension notebook de ttk.
    J'arrive au code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    import tkinter
    import tkinter.filedialog as tkFileDialog
    import tkinter.ttk as ttk
    import tkinter.messagebox as tkMessageBox
    import os
     
    class Fichier_menu():
        """ Gestion des actions du menu déroulant de fichier"""
     
        def __init__(self,parent,onglet,fenetre):
            """ Installation des sous-menus - Parent est la barre de menu principale et fenetre, la fenêtre associée"""
            self.mp=parent
            self.fe=fenetre
            self.ong=onglet
            self.menu_fichier=tkinter.Menu(self.mp)
            self.mp.add_cascade(menu=self.menu_fichier,label = "Fichier", underline =0,foreground ='red')
            self.menu_fichier.add_command(label="Nouveau                      Ctrl+N",
                                          underline=0,font =('Comic Sans MS', 11),command=self.nouvelle_feuille)
            self.menu_fichier.add_command(label="Fichiers Récents        Ctrl+R",underline=9,font =('Comic Sans MS', 11))        
            self.menu_fichier.add_command(label="Ouvrir                         Ctrl+O",underline=0,font =('Comic Sans MS', 11),command=self.ouverture_fichier)
            self.menu_fichier.add_command(label="Sauvegarder              Ctrl+S",underline=0,font =('Comic Sans MS', 11))
            self.menu_fichier.add_command(label="Enregistrer Sous       Ctrl+Shift+S",underline=0,font =('Comic Sans MS', 11))        
            self.menu_fichier.add_separator()
            self.menu_fichier.add_command(label="imPrimer                     Ctrl+P", underline =2,font =('Comic Sans MS', 11))        
            self.menu_fichier.add_command(label="Fermer                       Ctrl+W", underline =0,font =('Comic Sans MS', 11))        
            self.menu_fichier.add_command(label="Quitter                      Ctrl+Q", underline =0,command=self.fermer_tout,font =('Comic Sans MS', 11))
     
        def nouvelle_feuille(self):
            """création d'un nouveau fichier"""
            self.f1 = tkinter.Frame(self.ong,bg ='blue', bd =2)
            self.s1 = tkinter.Scrollbar(self.f1, orient=tkinter.VERTICAL)
            self.texte1 = tkinter.Text(self.f1, wrap=tkinter.WORD)
            self.s1.config(command = self.texte1.yview)
            self.texte1.config(yscrollcommand = self.s1.set)
            self.texte1.grid(column=0, row=0)
            self.s1.grid(column=1, row=0, sticky=tkinter.S+tkinter.N)
            self.ong.add(self.f1,text ='nouveau')
     
        def ouverture_fichier(self):
            """ouverture d'un fichier grâce à tkFileDialog"""
            self.fd=tkFileDialog.askopenfilename(filetypes = [("Fichiers Tex","*.tex"),("Fichiers Python","*.py"),("Tous", "*")])
            self.f=open(self.fd,"r")
            self.texte_fichier=self.f.read()
            self.f.close()
            self.nom_fichier=os.path.basename(str(self.fd))
            self.f1 = tkinter.Frame(self.ong,bg ='blue', bd =2)
            self.s1 = tkinter.Scrollbar(self.f1, orient=tkinter.VERTICAL)
            self.texte1 = tkinter.Text(self.f1, wrap=tkinter.WORD)
            self.s1.config(command = self.texte1.yview)
            self.texte1.config(yscrollcommand = self.s1.set)
            self.texte1.grid(column=0, row=0)
            self.s1.grid(column=1, row=0, sticky=tkinter.S+tkinter.N)
            self.texte1.insert(tkinter.INSERT,self.texte_fichier)
            self.ong.add(self.f1,text =self.nom_fichier)
            self.ong.focus_set()
     
        def fermer_tout(self):
            """Tout fermer"""
            self.fe.destroy()
     
    class Application():
     
        def __init__(self):
            self.root=tkinter.Tk()
            self.root.title("Essai de menus déroulants")
            self.onglet = ttk.Notebook(self.root)
            self.onglet.pack(expand = tkinter.YES , fill = tkinter.X)
            self.menu_principal = tkinter.Menu(self.root)
            self.barre_fichier=Fichier_menu(self.menu_principal,self.onglet,self.root)
            self.root.configure(menu = self.menu_principal)
            self.root.wm_state(newstate="zoomed")
            self.root.mainloop()
     
    if __name__ == '__main__':
        Application()
    Je ne suis pas arrivé à faire certaines commandes (après recherches); d'où mes questions...

    1. Par exemple, j'aimerais pouvoir appeler la fonction ouverture_fichier en tapant la touche raccourci <<Control o>>. J'ai essayé avec self.root.bind('<Control o>',self.barre_fichier.ouverture_fichier), sans succès. Je pense que les touches raccourcies sont programmables mais je ne vois pas comment et où les déclarer et ensuite comment les rattacher à leur commande respective.

    2. J'aurais aimé que le widgey text (ou éventuellement l'onglet) occupe la largeur et hauteur maximale. J'ai essayé avec <<expand = tkinter.YES , fill = tkinter.X>> mais sans succès également; je sais que je peux taper width=1240 par exemple, mais je voulais savoir s'il y avait une commande qui me permettrait d'éviter le tâtonnement.

    3. J'arrive à modifier le mode d'affichage des sous-menus (foreground ='red' par exemple) mais je n'arrive toujours pas à modifier le format de la barre de menu <<parent>>.
    Est-il possible aussi d'inclure à côté du texte du menu, un petit icône?

    Merci pour vos éventuelles réponses.

    Gabriel

  5. #5
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
            self.fe.bind('<Control-o>', self.ouverture_fichier)
    ...
        def ouverture_fichier(self, event=None):
            """ouverture d'un fichier grâce à tkFileDialog"""
            self.fd = tkFileDialog.askopenfilename(filetypes = [("Fichiers Tex","*.tex"),("Fichiers Python","*.py"),("Tous", "*")])
            self.f = open(self.fd, "r")
            self.texte_fichier = self.f.read()
            self.f.close()
            self.nom_fichier = os.path.basename(str(self.fd))
            f1 = tkinter.Frame(self.ong, bg ='blue', bd =2)
            self.s1 = tkinter.Scrollbar(f1, orient=tkinter.VERTICAL)
            self.texte1 = tkinter.Text(f1, wrap=tkinter.WORD)
            self.s1.config(command=self.texte1.yview)
            self.texte1.config(yscrollcommand=self.s1.set)
            self.texte1.pack(side=tkinter.LEFT, fill=tkinter.BOTH, expand=1)
            self.s1.pack(side=tkinter.RIGHT, fill=tkinter.Y)
            self.texte1.insert(tkinter.INSERT, self.texte_fichier)
            f1.grid(row=0, column=0)
            self.ong.add(f1, text=self.nom_fichier)
            self.ong.focus_set()
    Pour ce qui est du Menu Menubutton supporte les images (pas les mix).
    Sinon c'est à la mano

    @+

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Par défaut
    Bonjour,

    Merci pour la réponse - çà marche impeccable.

    Par contre je n'ai pas compris <<à la mano>>;

    Comme je travaille avec pyhton 3, apparemment le MenuButton est obsolète.

    J'ai vu dans le forum, des codes qui utilisaient tkinter.Photoimage. Est-ce une possibilité?

    Apparemment, pour la largeur, je vais devoir utiliser width. Cette largeur est-elle indépendante de la taille de l'écran? C'est à dire si width=1240 sur mon poste fixe, aurais-je le même effet sur mon futur portable?

    Encore merci.

    Gabriel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Qt Designer] Créer des slots / signaux perso
    Par g_barthe dans le forum PyQt
    Réponses: 1
    Dernier message: 01/05/2008, 23h32
  2. Réponses: 19
    Dernier message: 14/09/2007, 03h01
  3. Créer son propre éditeur de texte
    Par Bobybx dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/07/2006, 14h55
  4. Petit éditeur pour messagerie interne
    Par Attilius dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 11/07/2006, 17h31
  5. Créer son propre éditeur pour un descendant de tpopupmenu
    Par sfpx dans le forum Composants VCL
    Réponses: 1
    Dernier message: 04/10/2005, 12h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo