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 :

Pb de Toplevel en arrière plan


Sujet :

Tkinter Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Par défaut Pb de Toplevel en arrière plan
    Bonjour,

    Mon appli est constituée d'une fenêtre principale, mais également de fenêtres de configuration... Ma fenêtre principale est une Frame, et je fais les autres en toplevel. Quand je les appelle, elles s'affichent bien en premier plan, mais quand j'agis dessus en cliquant sur un bouton elle disparaît au dernier plan.Comment laisser une toplevel en premier plan, et puis la supprimer.
    Merci

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 192
    Par défaut
    Bonjour,

    il faut utiliser "grab_set()"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Par défaut
    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
    class Barre_Menu(Frame):
     
        def __init__(self,master):
     
            self.couleur='grey'
            self.master=master
            Frame.__init__(self, master,relief=RAISED, bd=1, background=self.couleur)
            self.onglet_fichier=Menubutton(self,text='Fichier',background=self.couleur)
            self.onglet_fichier.pack(side=LEFT)
            self.menu_fichier=Menu(self.onglet_fichier)
            self.menu_fichier.add_command(label='Nouveau <Ctrl+N>', command=self.nouveau)
            self.menu_fichier.add_command(label='Quitter    <Ctrl+Q>',command=app.quitter)
            self.onglet_fichier.configure(menu=self.menu_fichier)
            self.pack()
     
        def nouveau(self):
            nouveau=Toplevel(self.master)
            fichiers=Fichier(nouveau,self.master)
     
    class Fichier:
     
        def __init__(self,fen,master):
            self.fen=fen
            self.frame=Frame(self.fen,relief=RAISED, bd=1)
     
            ###FICHIER1###
            ss_menu_top1 = Frame(self.frame,borderwidth=2)
     
            #Creation d'une etiquette inseree dans 'ss_menu_top1'
            etiquette1 = Label(ss_menu_top1,text = 'Fichier 1 : ')
            etiquette1.pack(side=LEFT)
     
            #Creation d'un boite d'edition dans 'nenu_top'
            self.field1 = Tix.Entry(ss_menu_top1,width=100,bg='ivory',relief='sunken')
            self.field1.pack(side=LEFT, expand=YES, fill=X)
            self.field1.insert(END,app.fichier1)
     
            #Creation d'un bouton dans 'menu_top'
            bouton1 = Button(ss_menu_top1,text='chercher',command=lambda ms=master, fic=1: self.import_fichier(ms,fic))
            bouton1.pack(side=LEFT)
     
            ss_menu_top1.pack(side=TOP, expand=YES, fill=X,padx=4, pady=4, ipadx=4, ipady=4)
     
            ###BOUTON VALIDER###
            valide = Button(self.frame,text='ok')
     
            master.bind('<Return>',self.Go)
            valide.bind('<Button-1>',self.Go)
     
            valide.pack(side=BOTTOM) 
            self.frame.pack()
     
     
     def import_fichier(self,master,which_fichier):
            import tkFileDialog
            import os.path
            file = tkFileDialog.askopenfile(parent=master,mode='rb',title='Choisissez un fichier')
     
            if file != None:
                fichier = file.name
                self.field1.delete(0,END)
                self.field1.insert(END,file.name)
                file.close()

    Comment dois-je appliquer cette fonction pour qu'elle fonctionne ?
    J'ai essayé de faire : self.fen.grab_set()
    et master.grab_set() dans la fonction import_fichier()
    ms rien ne change.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2006
    Messages : 19
    Par défaut Ca fonctionne mais autre problème
    Merci, j'ai trouvé comment ça fonctionnait, tout simple ; mon problème vient en fait d'ailleurs. Ma fonction d'import de fichier ouvre une boite de dialogue de recherche de fichiers ce qui la met devant et met mon toplevel en arrière plan. Comment puis-je donc faire pour que mon toplevel reste devant la fenêtre d'application ms derrière la boite de dialogue. ou comment réafficher mon toplevel après recherche des fichiers dans la boite de dialogue??

    Merci par avance

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    70
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 70
    Par défaut
    J'ai un léger problème : Le grab_set() marche très bien jusqu'à ce que je selectionne quelque chose dans une liste box de la fenêtre.
    Par exemple (faîtes abstraction du codage car c'est un bidouillage simplifié du programme principal) :
    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
    76
    77
    78
    79
    80
    81
    82
     
    # -*- coding: cp1252 -*-
    from Tkinter import *
    import Pmw
     
    #----------------------------------------------------------------------
    class Demo():
        def __init__(self):
            self.dataList = ['test1','test2']
            tk = Tk()
            Button(tk, text = 'Quit', command = tk.destroy).pack()
            self.fenL1()
     
        def fenL1(self):
            fen = Toplevel()
            fen.focus_set()
            fen.grab_set()
            Label(fen, text = 'Origines').grid(row = 0, column = 1)
            self.yScroll2 = Scrollbar(fen,
                                      orient = VERTICAL)
            self.yScroll2.grid(row = 1, column = 4, rowspan = 4)
            self.xScroll2 = Scrollbar(fen,
                                      orient = HORIZONTAL)
            self.xScroll2.grid(row = 5, column = 1, columnspan = 4)
            self.lbox2 = Listbox (fen, xscrollcommand = self.xScroll2.set,
                                  yscrollcommand = self.yScroll2.set
                                  )
            self.lbox2.grid(row = 1, column = 1, rowspan = 4, columnspan = 4)
            self.xScroll2['command'] = self.lbox2.xview
            self.yScroll2['command'] = self.lbox2.yview
     
            ### Liste déroulante à droite ###
            Label(fen, text = 'Cible').grid(row = 0, column = 7)
            self.lbox3 = Pmw.ComboBox(fen,
                                      scrolledlist_items = self.dataList,
                                      )
            self.lbox3.grid(row = 1, column = 7)
            self.lbox3.selectitem(0)
     
            ### Boutons de droite ###
            self.btValid = Button(fen, text = 'Valider la dépendance', command = fen.destroy)
            self.btValid.grid(row = 2, column = 8)
     
            ### Boite déroulante en bas ###
            self.lbox4 = Pmw.ComboBox(fen,
                                      history = False,
                                      scrolledlist_items = self.dataList,
                                      label_text = 'Ajouter',
                                      labelpos = W,
                                      selectioncommand = self.addElmt
                                      )
            self.lbox4.grid(row = 6, column = 1)
     
            ### Bouton <retirer> en bas ###
            self.btRetir = Button(fen, text = 'Retirer', command = self.removeElmtL2)
            self.btRetir.grid(sticky = S, row = 6, column = 5, padx = 5, pady = 5)
     
        def addElmt(self, evt):
            testExistance = False
            for i in range(self.lbox2.size()):
                if self.lbox4.getcurselection()[0] == self.lbox2.get(i):
                        testExistance = True
            if testExistance == False:
                selectedElmt = self.lbox4.getcurselection()[0]
                self.lbox2.insert(self.lbox2.size(), selectedElmt)
            self.btValid.configure(state='normal')
     
        def removeElmtL2(self):
            try:    # test si la liste est vide
                selectedElmt = self.lbox2.curselection()
                self.lbox2.delete(selectedElmt)
                if (self.lbox2.size() == 0):
                    self.btValid.configure(state = 'disabled')
            except TclError:
                None
     
     
    #----------------------------------------------------------------------
     
    if __name__=='__main__':
        demo = Demo()
        mainloop()
    Le but ici est d'être obligé de cliquer sur "valider dépendance" de la fenêtre secondaire, avant de pouvoir cliquer sur "Quit" de la fenêtre principale.
    Si j'essaie de cliquer sur le bouton "Quit" de la fenêtre principale, la fenêtre secondaire passe en premier plan. Jusque là tout va bien. Par contre, si je selectionne quelque chose dans une liste box, le grab_set ne fonctionne plus et je peux ensuite cliquer sur "Quit". Comment faire pour que la fenêtre secondaire garde le grab_set ?

Discussions similaires

  1. Dessiner une image en arrière plan d'1 MDI Main Frame
    Par Yacine95000 dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 10h22
  2. [VB6] centrer l'image d'arrière-plan de ma Form ?
    Par ghohm dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/04/2004, 01h58
  3. petit problème premier plan, arrière plan
    Par gros bob dans le forum OpenGL
    Réponses: 4
    Dernier message: 19/04/2004, 12h00
  4. comment stoper 1 thread d'arrière-plan
    Par ms91fr dans le forum Langage
    Réponses: 3
    Dernier message: 06/06/2003, 17h46
  5. changer l'image d'arrière plan du bureau
    Par etenclin dans le forum MFC
    Réponses: 7
    Dernier message: 22/08/2002, 15h54

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