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 :

Rendre une fenêtre unique [Python 3.X]


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Par défaut Rendre une fenêtre unique
    Bonjour,

    J'ai créer un bouton qui me permet d'ouvrir une fenêtre de confirmation, seulement si je clique une deuxième fois sur le bouton une fenêtre supplémentaire s'ouvre.
    Comment faire pour que ma fenêtre soit "unique" (ce n'est peu-être pas le mot juste).
    Petite demande supplémentaire je cherche une documentation sur les objets tkinter avec un descriptif des méthodes de chaque objets.

    voici mon code :
    Code python : 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
     
    # Suivant que l'on exécute ce script sous Python 3 ou Python 2,
    # on utilisera le module Tkinter correspondant :
    try:
        from tkinter import *      # module Tkinter pour Python 3
    except:
        from Tkinter import *      # module Tkinter pour Python 2
     
    class FenValid(Toplevel):
        # Execute la commande en paramètre avec comme argument un text de valeur : BP1 ou BP2 ou none selon le bouton appuyé
     
        def sortie(self, event =None):
            self.destroy ()      
            # Exécuter la commande indiquée, avec l'argument-item encodé tel quel :
            self.command(self.item)
     
        def validationBP (self):
            self.item='BP1'
            self.sortie()
     
        def annulationBP (self):
            self.item='BP2'
            self.sortie()
     
        "Fenêtre satellite contenant deux boutons"
        def __init__(self,texte,labelBP1,labelBP2, command ='', **Arguments):
            Toplevel.__init__(self, **Arguments)
            self.command =command        # fonction à invoquer après clic ou <enter>
            self.item='none'
            self.boutonBP1= Button(self,text=labelBP1,command=self.validationBP)
            self.boutonBP1.grid(row=2,column=1,padx=10,pady=10)        
            self.boutonBP2= Button(self,text=labelBP2,command=self.annulationBP)
            self.boutonBP2.grid(row=2,column=2,padx=10,pady=10)
            chaine = Label(self)
            chaine.grid(row=1,column=1,padx=10,pady=10,columnspan=2)
            chaine.configure (text = texte)
     
    def shoot(event):
        print ('-- Souris  x='+str(event.x)+'  y='+str(event.y))
     
    # ------------------------ MAIN --------------------------------        
     
    def changeCoul(col):
        fen.configure(background = col)
     
    def changeLabel():
        lab.configure(text = combo.get())
     
    def fermeture(rep):
        if rep=='BP1':
            fen.destroy()
     
    def rien(rep):
        Print('rien')
     
    def validationFermeture():
        fenValidFerm= FenValid (texte='Le programme est-t-il terminé ? ',labelBP1='OUI',labelBP2='NON',command = fermeture)
     
    fen = Tk()
    fen.overrideredirect(1) 
    largeur, hauteur = (500,250)
     
    canevas = Canvas(fen,bg='dark grey',height=hauteur,width=largeur)
    canevas.grid(row=2,column=1,padx=10,pady=10,rowspan=6,columnspan=9)                    
    canevas.create_polygon (0,0,largeur,0,largeur,hauteur,0,hauteur,fill='dark grey',outline='White') #pourtour
    canevas.bind("<Button-1>", shoot)
     
    boutonFermeture= Button(text='Fermeture',command=validationFermeture)
    boutonFermeture.grid(row=9,column=1,padx=10,pady=10,columnspan=3)        
     
    fen.mainloop()

    Par avance merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Il faut le préciser avec wait_window() à la déclaration et grab_set() à l'instanciation.

    Comme ceci:
    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
     
    # -*- coding: utf-8 -*-
     
    try:
        from tkinter import *      # module Tkinter pour Python 3
    except:
        from Tkinter import *      # module Tkinter pour Python 2
     
    class FenValid(object):
        def __init__(self, texte, labelBP1, labelBP2, command, parent):
            self.tlvl = Toplevel(parent)
            self.command = command
            self.item = 'none'
            self.boutonBP1= Button(self.tlvl, text=labelBP1, command=self.validationBP)
            self.boutonBP1.grid(row=2, column=1, padx=10, pady=10)        
            self.boutonBP2= Button(self.tlvl, text=labelBP2, command=self.annulationBP)
            self.boutonBP2.grid(row=2, column=2, padx=10, pady=10)
            chaine = Label(self.tlvl)
            chaine.grid(row=1, column=1, padx=10, pady=10, columnspan=2)
            chaine.configure(text=texte)
            self.tlvl.grab_set()
     
        def sortie(self, event=None):
            self.tlvl.destroy()
            self.command(self.item)
     
        def validationBP (self):
            self.item = 'BP1'
            self.sortie()
     
        def annulationBP (self):
            self.item = 'BP2'
            self.sortie()
     
     
    def shoot(event):
        print ('-- Souris  x='+str(event.x)+'  y='+str(event.y))
     
    # ------------------------ MAIN --------------------------------        
     
    def changeCoul(col):
        fen.configure(background = col)
     
    def changeLabel():
        lab.configure(text = combo.get())
     
    def fermeture(rep):
        if rep=='BP1':
            fen.destroy()
     
    def rien(rep):
        Print('rien')
     
    def validationFermeture():
        fenValidFerm = FenValid('Le programme est-t-il terminé ? ', 'OUI', 'NON', 
                                fermeture, fen)
        fen.wait_window(fenValidFerm.tlvl)
     
    fen = Tk()
    #fen.overrideredirect(1) 
    largeur, hauteur = (500,250)
     
    canevas = Canvas(fen,bg='dark grey',height=hauteur,width=largeur)
    canevas.grid(row=2,column=1,padx=10,pady=10,rowspan=6,columnspan=9)                    
    canevas.create_polygon(0,0,largeur,0,largeur,hauteur,0,hauteur,fill='dark grey',outline='White')
    canevas.bind("<Button-1>", shoot)
     
    boutonFermeture= Button(text='Fermeture',command=validationFermeture)
    boutonFermeture.grid(row=9,column=1,padx=10,pady=10,columnspan=3)        
     
    fen.mainloop()
    J'ai aussi fait le nettoyage ....

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par VinsS Voir le message
    J'ai aussi fait le nettoyage ....
    Que nenni
    Si on vire tout ce qui est sans rapport avec le sujet, çà donne:
    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
    import tkinter as tk
     
    def dialog():
        w = tk.Toplevel(app)
        tk.Button(w, text='Quit', command=w.destroy).pack()
        w.grab_set()
        return w
     
     
    def do_create():
        print ('create dialog')
        w = dialog()
        app.wait_window(w)
        print ('dialog ends')
     
    app = tk.Tk()
    tk.Button(text='Go', command=do_create).pack()
    tk.mainloop()
    Citation Envoyé par Khar14
    Petite demande supplémentaire je cherche une documentation sur les objets tkinter avec un descriptif des méthodes de chaque objets.
    Si vous êtes courageux, vous lisez la documentation du module tkinter. Elle explique comment l'interface avec TCL/TK est construite. Sachant cela vous pouvez lire la documentation TCL/TK.
    Moins sportif, vous allez faire votre marché sur le wiki Python.
    note: celle que je préfère est Tkinter reference: a GUI for Python, mais les goûts et les couleurs...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre habitué
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2014
    Messages : 8
    Par défaut
    Merci pour vos réponses clairs et limpides.

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

Discussions similaires

  1. [phpMyAdmin] Rendre une authentification unique et valable pour phpMyAdmin
    Par Daniel_P dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 12/12/2007, 12h44
  2. Rendre une fenêtre non-redimensionnable
    Par TSalm dans le forum Windows
    Réponses: 10
    Dernier message: 15/11/2007, 10h57
  3. Réponses: 6
    Dernier message: 09/08/2007, 21h41
  4. Réponses: 2
    Dernier message: 16/03/2007, 09h13
  5. Rendre une fenêtre modale non modale
    Par Smortex dans le forum Composants VCL
    Réponses: 2
    Dernier message: 30/03/2003, 17h56

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