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 :

Fenetre avec nombre de champ variable


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Par défaut Fenetre avec nombre de champ variable
    Bonjour à toutes et à tous!

    Je cherche actuellement à apprendre un peu le développement de GUI en python, je me suis donc naturellement tourner vers le module Tkinter pour commencer.
    Dans une application que je cherche à développer je voudrais qu'une seconde fenêtre s'ouvre avec un nombre de champ (de frame pour faire simple) variable et préalablement renseigner par l'utilisateur.
    Pour cela je voulais ranger dans des listes les widgets mais je n'arrive pas à accéder au méthode de ces dernier depuis la liste, notamment au méthode de placement (ici .grid() ) :/ je vous joint le code, naturellement beaucoup d'optimisation peuvent être faite, c'est un premier essais, mais la parties qui nous intéresse ici concerne la fonction generation_windows().

    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
    83
    84
    85
    86
    87
    88
     
     
    import tkinter as tk
    from tkinter.filedialog import askdirectory
     
    screen_x = 1600
    screen_y = 1440
    window_x = 500
    window_y = 110
     
     
    def path_selection():
        global path, entry_save
        entry_save.delete(0,last=1000)
        pathhhh = askdirectory()
        path.set(pathhhh)
     
    def generation_windows(saving_name, saving_path, number):
        generation_f2 = tk.Tk()
     
        generation_f2.title('Génération des sirènes')
        generation_f2.resizable(width=0, height=0)
        generation_f2.geometry('600x{}+{}+{}'.format(120*number,screen_x // 2 - window_x//2, screen_y // 2 - window_y // 2))
        generation_f2.positionfrom('user')
     
        label_name_sirene = [[] for i in range(number)]
        entry_name_sirene = [[] for i in range(number)]
        label_direction = [[] for i in range(number)]
        label_number = [[] for i in range(number)]
        entry_direction = [[[] for j in range(5)] for i in range(number)]
        entry_number = [[[] for j in range(5)] for i in range(number)]
     
        for i in range(number):
            lbl1 = tk.Label(generation_f2, text='Nom: \t')
            label_name_sirene[i].append(lbl1)
            label_name_sirene[i].grid(row=3*i, column=0)
     
            entry1 = tk.Entry(generation_f2, width=35, validate='all')
            entry_name_sirene[i].append(entry1)
            entry_name_sirene[i].grid(row=3*i, column=1, columnspan=5)
     
            label_direction[i].append(tk.Label(generation_f2, text='Direction: \t'))
            label_direction[i].grid(row=3*i+1, column=0)
     
            label_number[i].append(tk.Label(generation_f2, text='Nombre: \t'))
            label_number[i].grid(row=2+3*i, column=0)
     
            for j in range(5):
                entry_direction[i][j].append(tk.Entry(generation_f2, width = 4, validate='all'))
                entry_direction[i][j].grid(row=1+3*i, column=1+j)
     
                entry_number[i][j].append(tk.Entry(generation_f2, width = 4, validate='all'))
                entry_number[i][j].grid(row=2+3*i, column=1+j)
     
        generation_f2.mainloop()
     
     
     
    projet_f1 = tk.Tk()
    path = tk.StringVar()
    name = tk.StringVar()
     
    projet_f1.title('Sirène plot')
    projet_f1.resizable(width=0, height=0)
    projet_f1.geometry('{}x{}+{}+{}'.format(window_x,window_y,screen_x // 2 - window_x//2, screen_y // 2 - window_y // 2))
    projet_f1.positionfrom('user')
     
    label_name = tk.Label(projet_f1, text = "Nom du projet: \t")
    label_name.grid(row = 0, column = 0)
    entry_name= tk.Entry(projet_f1, bg = '#d1d1e0', width = 43, validate = 'all', textvariable=name)
    entry_name.grid(row = 0, column = 1, columnspan = 2)
     
    label_save = tk.Label(projet_f1, text = 'Chemin de sauvegarde: \t')
    label_save.grid(row=1, column=0)
    entry_save = tk.Entry(projet_f1, bg = '#d1d1e0', width = 35, validate = 'all', textvariable=path)
    entry_save.grid(row=1, column=1)
    button_save = tk.Button(projet_f1, text = 'path', command = path_selection)
    button_save.grid(row=1, column=2)
     
    label_nb_sirene = tk.Label(projet_f1, text= 'Nb de sirène \t')
    label_nb_sirene.grid(row=2, column = 0)
    spinbox_nb_sirene = tk.Spinbox(projet_f1, from_= 1, to = 6)
    spinbox_nb_sirene.grid(row=2, column = 1, columnspan=2)
     
    button_ok = tk.Button(projet_f1, text = 'OK', command= lambda: generation_windows(name.get(), path.get(), int(spinbox_nb_sirene.get())))
    button_ok.grid(row=4, column=0, columnspan=3)
     
    projet_f1.mainloop()
    Je vous remercie par avance du temps que vous aller me consacrer!

  2. #2
    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
    Salut,

    Si vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        for i in range(number):
            lbl1 = tk.Label(generation_f2, text='Nom: \t')
            label_name_sirene[i].append(lbl1)
            label_name_sirene[i].grid(row=3*i, column=0)
    label_name_sirene[i] est une liste de Label et non le dernier Label ajouté à cette liste. Et de façon plus générale, label_name_sirene étant une liste de listes, il faudra 2 indices pour accéder à ses éléments.
    Donc écrire label_name_sirene[i][-1] pour accéder au dernier élément de... mais il sera plus simple d'utiliser la variable lbl1.

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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2018
    Messages : 18
    Par défaut
    Bonjour wiztricks et merci pour ta réponse,

    Effectivement je ne comprend se qui m'est passé par la tête en voulant faire des liste de liste ici, enfin bref je viens de résoudre le problème! merci beaucoup pour tes conseil.

    Note aux admin: puis-je laisser le topic actif le temps de finir mon appli des fois que j'ai d'autres question à poser?

    Cdt,
    Elliot

Discussions similaires

  1. [WD-2016] Publipostage avec nombre de champs variables
    Par monza dans le forum Word
    Réponses: 1
    Dernier message: 04/02/2018, 14h49
  2. Chargement BCP d'un fichier avec nombre de champs variable
    Par GuillermoMagistrale dans le forum Outils
    Réponses: 1
    Dernier message: 22/04/2010, 17h38
  3. Formulaire avec nombre de champ variable
    Par david87 dans le forum IHM
    Réponses: 0
    Dernier message: 21/04/2008, 10h16
  4. Requete paramétrée avec nombre de champs variable
    Par Braillane dans le forum Accès aux données
    Réponses: 3
    Dernier message: 07/02/2008, 23h09
  5. Interface avec un nombre de champs variable
    Par vladvad dans le forum Windows Forms
    Réponses: 2
    Dernier message: 11/06/2007, 11h19

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