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 :

cosméthique avec grid


Sujet :

Tkinter Python

  1. #1
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut cosméthique avec grid
    Bonsoir, j'ai un souci d'esthétique avec les grid sur petit écran (15'').
    Est-ce que qqn pourrait m'aider à comprendre pourquoi la barre de recherche est énorme ?
    Voici mon code :
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
     
    import tkinter as tk
    from tkinter.scrolledtext import ScrolledText
     
     
    cpt = ""
    def choisir_dossier ():
        pass
     
    def remplir_liste (dossier):
        pass
     
    def afficher_fichier (event):
        pass
     
    ext=".tex"
    def clic(evt):
        pass
     
    def recherche(chaine, path, extension):
        pass
     
    def recherche_exacte(chaine, path, extension):
        pass
     
    def recherche_replace(chaine1, chaine2, path, extension):
        pass
     
    def recherche_replace_titre(chaine1, chaine2, path):
        pass
     
    def recherche_titre(chaine, path, extension):
        pass
     
    def recherche_pdf(chaine, path):
        pass
     
    fenetre = tk.Tk()
    fenetre.title("Recherche d'une chaîne")
    conteneur_fichiers = tk.Frame(fenetre)
     
    conteneur_fichiers.columnconfigure(0, weight=1)
    conteneur_fichiers.rowconfigure(1, weight=1)
     
    tk.Label(
        conteneur_fichiers,
        text="--------------------------------"
    ).grid(row=0, column=0, sticky=tk.EW)
     
    cvar_fichiers = tk.StringVar()
    liste_fichiers = tk.Listbox(conteneur_fichiers, listvariable=cvar_fichiers)
    liste_fichiers.grid(row=1, column=0, sticky=tk.NS+tk.EW)
     
    vbar_fichiers = tk.Scrollbar(conteneur_fichiers, orient=tk.VERTICAL)
    vbar_fichiers.grid(row=0, column=1, sticky=tk.NS+tk.EW)
     
    liste_fichiers.configure(yscrollcommand=vbar_fichiers.set)
    vbar_fichiers.configure(command=liste_fichiers.yview)
     
    liste_fichiers.bind("<ButtonRelease-1>", afficher_fichier)
     
    tk.Button(
        conteneur_fichiers,
        text="Cliquer ICI pour sélectionner un dossier",
        command=choisir_dossier,
    ).grid(row=0, column=0)
     
    conteneur_fichiers.grid(row=0, column=0, sticky=tk.NS+tk.EW, padx=5, pady=5)
     
    conteneur_affichage = tk.Frame(fenetre)
     
    conteneur_affichage.columnconfigure(0, weight=1)
    conteneur_affichage.rowconfigure(1, weight=1)
     
    tk.Label(
        conteneur_affichage,
        text="Présent ici : ",
        bg='light cyan',
    ).grid(row=0, column=1, sticky=tk.EW)
     
    label_ext=tk.Label(fenetre,text="Extension")
    label_ext.grid(row=1,column=0,sticky=tk.NS+tk.EW)
    l_box = tk.Listbox(fenetre)
    l_box.grid(row=1,column=0,sticky=tk.EW)
    l_box.bind('<ButtonRelease-1>',clic)  # on associe l'évènement "relachement du bouton gauche la souris" à la listbox
     
    label_rech=tk.Label(fenetre,text="A rechercher",font='Helvetica 12 bold', bg='light cyan', fg='blue')
    label_rech.grid(row=1,column=1,sticky=tk.NS+tk.EW)
    mot = tk.StringVar(fenetre)
    mot.set("")
    entree = tk.Entry(fenetre, textvariable=mot, bg='light yellow', width=30)
    entree.grid(row=2,column=1,sticky=tk.NS+tk.EW)
     
    label_rempl=tk.Label(fenetre,text="Remplacer par",font='Helvetica 12 bold', bg='light cyan', fg='red')
    label_rempl.grid(row=3,column=1,sticky=tk.NS+tk.EW)
    rempl = tk.StringVar(fenetre)
    rempl.set("")
    entree = tk.Entry(fenetre, textvariable=rempl, bg='light yellow', width=30)
    entree.grid(row=4,column=1,sticky=tk.NS+tk.EW)
     
    affichage_texte = ScrolledText(
        conteneur_affichage,
        bg="white",
        fg="blue",
        font="sans 9 bold",
        height=8,
        width=70,
    )
    affichage_texte.grid(row=0, column=2, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_affichage,
        text="Recherche mot dans les contenus",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='gray95', activeforeground='green',
        command=lambda: recherche()
    ).grid(row=5, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_affichage,
        text="Recherche mot exact dans les contenus",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='gray95', activeforeground='green',
        command=lambda: recherche_exacte()
    ).grid(row=6, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_affichage,
        text="Recherche mot dans les fichiers pdf",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='gray95', activeforeground='green',
        command=lambda: recherche_pdf()
    ).grid(row=7, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_affichage,
        text="Recherche mot dans les noms de fichier",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='gray95', activeforeground='green',
        command=lambda: recherche_titre()
    ).grid(row=8, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_affichage,
        text="Recherche et remplace le mot dans les contenus",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='light yellow', activeforeground='red',
        command=lambda: recherche_replace()
    ).grid(row=8, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_affichage,
        text="Remplace dans le nom de fichier",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='light yellow', activeforeground='red',
        command=lambda: recherche_replace_titre()
    ).grid(row=9, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_affichage,
        text="Quitter",
        font='Helvetica 16 bold', bg='white', fg='blue', activebackground='light cyan', activeforeground='red',
        command=fenetre.destroy
    ).grid(row=11, column=1, sticky=tk.NS+tk.EW)
    conteneur_affichage.grid(row=0, column=1, sticky=tk.NS+tk.EW, padx=3, pady=3)
    fenetre.rowconfigure(0, weight=1)
    fenetre.columnconfigure(1, weight=1)
     
    remplir_liste("./")
     
    fenetre.mainloop()

  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,

    Citation Envoyé par marco056 Voir le message
    Est-ce que qqn pourrait m'aider à comprendre pourquoi la barre de recherche est énorme ?
    Je ne sais pas trop ce que peut être la barre de recherche.

    Maintenant, vous voyez bien que vos 160 lignes de code qui créent des widgets dans des Frames, des widgets dans la fenêtre principales avec des grid partout est difficile à comprendre.

    Pour essayer d'y voir plus clair, je vous propose de réorganiser quelque peu votre code. Pour chaque Frame, créez une fonction qui crée la Frame, place les widgets qu'il faut à l'intérieur et retourne l'instance de Frame à l'appelant.

    L'appelant récupère la Frame et l'affiche où il faut.

    Ce faisant vous allez hiérarchiser côté code la hiérarchie des widgets affichés:
    Au premier niveau, tout ce qui est affiché dans la fenêtre principale, dans des fonctions ce qui est dans des Frames.

    Non seulement vous allez mieux vous y retrouver mais quand vous aurez un problème, vous pourrez l'illustrer par un code beaucoup plus petit pour l'illustrer. Par exemple, si le problème est sans rapport avec le contenu d'une Frame, remplacer la fonction qui crée Frame et tous les widgets qui sont dedans par une Frame à taille fixée vous permettra d'y voir plus clair sans vous perdre dans vos centaines de lignes de code.

    Pour ce qui est de la question originelle, si vous fabriquez une grille, lignes et colonnes sont dimensionnées en fonction de l'objet le plus grand à afficher. Donc si ligne 1, colonne 0, vous mettez un widget "grand" (Listbox, Text), le Label ligne 1, colonne 1 aura la hauteur de la colonne 0.

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

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,
    Citation Envoyé par marco056 Voir le message
    Est-ce que qqn pourrait m'aider à comprendre pourquoi la barre de recherche est énorme ?:
    Ben elle prend tout l'espace de sa cellule à cause du sticky (malgré le width à 30) :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    entree = tk.Entry(fenetre, textvariable=mot, bg='light yellow', width=30)
    entree.grid(row=2, column=1, sticky=tk.NS+tk.EW)

    Avec par exemple sticky=tk.W elle sera "collée" à gauche et tu peux ajouter une marge si tu veux et elle aura une largeur correspondant au width que tu as fixé...

    Mais j'ai l'impression que tu voulais qu'elle soit au milieu de trois colonnes mais le problème c'est que ta fenêtre principale n'en a que deux...

    - J'ai l'impression que tu n'as pas tenu compte du fait que chaque container a sa propre grille...

    - Tu fais des sauts dans les numéros de lignes (par exemple row=9 à row=11) mais cela fait juste des lignes vides...

    - Et il y a plusieurs éléments qui occupent la même cellule du coup ils sont superposés et donc on ne voit celui qui est en dessous :

    Par exemple le label "Extension" est cachée par la Listbox "l_box" car ils occupent la même cellule (row=1,column=0) dans la fenêtre :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    label_ext=tk.Label(fenetre,text="Extension")
    label_ext.grid(row=1,column=0,sticky=tk.NS+tk.EW)
    l_box = tk.Listbox(fenetre)
    l_box.grid(row=1,column=0,sticky=tk.EW)

    Autre exemple le label "--------------------------------" est cachée par le bouton "Cliquer ICI pour sélectionner un dossier" car ils occupent la même cellule (row=0, column=0) dans le conteneur_fichiers :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tk.Label(
        conteneur_fichiers,
        text="--------------------------------"
    ).grid(row=0, column=0, sticky=tk.EW)
    ...
     
    tk.Button(
        conteneur_fichiers,
        text="Cliquer ICI pour sélectionner un dossier",
        command=choisir_dossier,
    ).grid(row=0, column=0)

    Bref il faudrait que tu fasses un petit croquis de l'interface graphique que tu souhaites en délimitant les positions de chaque container (qui ont chacun leur grille) et les positions de chaque widget dans chaque container...

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Merci à vous pour vos conseils. Je reviendrai vers vous si je ne parviens pas à ce que je souhaite.

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Bon, je crois avoir compris quelques subtilités mais j'ai encore un problème.
    Je souhaite que mon texte "Présent ici" soit au-dessus de ma fenetre d'affichage du texte.
    Pouvez-vous m'aiguiller ?
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
     
    import tkinter as tk
    from tkinter.scrolledtext import ScrolledText
     
     
    cpt = ""
    def choisir_dossier ():
        pass
     
    def remplir_liste (dossier):
        pass
     
    def afficher_fichier (event):
        pass
     
    ext=".tex"
    def clic(evt):
        pass
     
    def recherche(chaine, path, extension):
        pass
     
    def recherche_exacte(chaine, path, extension):
        pass
     
    def recherche_replace(chaine1, chaine2, path, extension):
        pass
     
    def recherche_replace_titre(chaine1, chaine2, path):
        pass
     
    def recherche_titre(chaine, path, extension):
        pass
     
    def recherche_pdf(chaine, path):
        pass
     
    # fenêtre principale
    fenetre = tk.Tk()
    fenetre.title("Recherche d'une chaîne")
    conteneur_fichiers = tk.Frame(fenetre)
     
    conteneur_fichiers.columnconfigure(0, weight=1)
    conteneur_fichiers.rowconfigure(1, weight=1)
     
    tk.Label(
        conteneur_fichiers,
        text="--------------------------------"
    ).grid(row=1, column=0, sticky=tk.EW)
     
    cvar_fichiers = tk.StringVar()
    liste_fichiers = tk.Listbox(conteneur_fichiers, listvariable=cvar_fichiers)
    liste_fichiers.grid(row=2, column=0, sticky=tk.NS+tk.EW)
     
    vbar_fichiers = tk.Scrollbar(conteneur_fichiers, orient=tk.VERTICAL)
    vbar_fichiers.grid(row=0, column=1, sticky=tk.NS+tk.EW)
     
    liste_fichiers.configure(yscrollcommand=vbar_fichiers.set)
    vbar_fichiers.configure(command=liste_fichiers.yview)
     
    liste_fichiers.bind("<ButtonRelease-1>", afficher_fichier)
     
    tk.Button(
        conteneur_fichiers,
        text="Cliquer ICI pour sélectionner un dossier",
        command=choisir_dossier,
    ).grid(row=0, column=0)
     
    conteneur_fichiers.grid(row=0, column=0, sticky=tk.NS+tk.EW, padx=5, pady=5)
     
    label_ext=tk.Label(fenetre,text="Extension")
    label_ext.grid(row=1,column=0,sticky=tk.NS+tk.EW)
    l_box = tk.Listbox(fenetre)
    l_box.grid(row=1,column=0,sticky=tk.EW)
    l_box.bind('<ButtonRelease-1>',clic)  # on associe l'évènement "relachement du bouton gauche la souris" à la listbox
     
    conteneur_widget = tk.Frame(fenetre)
    label_rech=tk.Label(conteneur_widget,text="A rechercher",font='Helvetica 12 bold', bg='light cyan', fg='blue')
    label_rech.grid(row=1,column=1,sticky=tk.NS+tk.EW)
    mot = tk.StringVar(conteneur_widget)
    mot.set("")
    entree = tk.Entry(conteneur_widget, textvariable=mot, bg='light yellow', width=30)
    entree.grid(row=2,column=1,sticky=tk.NS+tk.EW)
     
    label_rempl=tk.Label(conteneur_widget,text="Remplacer par",font='Helvetica 12 bold', bg='light cyan', fg='red')
    label_rempl.grid(row=3,column=1,sticky=tk.NS+tk.EW)
    rempl = tk.StringVar(conteneur_widget)
    rempl.set("")
    entree = tk.Entry(conteneur_widget, textvariable=rempl, bg='light yellow', width=30)
    entree.grid(row=4,column=1,sticky=tk.NS+tk.EW)
     
    conteneur_affichage = tk.Frame(fenetre)
     
    conteneur_affichage.columnconfigure(0, weight=1)
    conteneur_affichage.rowconfigure(1, weight=1)
     
    tk.Label(
        conteneur_affichage,
        text="Présent ici : ",
        bg='light cyan',
    ).grid(row=0, column=1, sticky=tk.EW)
     
    affichage_texte = ScrolledText(
        conteneur_affichage,
        bg="white",
        fg="blue",
        font="sans 9 bold",
        height=8,
        width=70,
    )
    affichage_texte.grid(row=0, column=2, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_widget,
        text="Recherche mot dans les contenus",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='gray95', activeforeground='green',
        command=lambda: recherche()
    ).grid(row=5, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_widget,
        text="Recherche mot exact dans les contenus",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='gray95', activeforeground='green',
        command=lambda: recherche_exacte()
    ).grid(row=6, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_widget,
        text="Recherche mot dans les fichiers pdf",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='gray95', activeforeground='green',
        command=lambda: recherche_pdf()
    ).grid(row=7, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_widget,
        text="Recherche mot dans les noms de fichier",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='gray95', activeforeground='green',
        command=lambda: recherche_titre()
    ).grid(row=8, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_widget,
        text="Recherche et remplace le mot dans les contenus",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='light yellow', activeforeground='red',
        command=lambda: recherche_replace()
    ).grid(row=8, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_widget,
        text="Remplace dans le nom de fichier",
        font='Helvetica 14 bold', bg='white', fg='blue', activebackground='light yellow', activeforeground='red',
        command=lambda: recherche_replace_titre()
    ).grid(row=9, column=1, sticky=tk.NS+tk.EW)
     
    tk.Button(
        conteneur_widget,
        text="Quitter",
        font='Helvetica 16 bold', bg='white', fg='blue', activebackground='light cyan', activeforeground='red',
        command=fenetre.destroy
    ).grid(row=11, column=1, sticky=tk.NS+tk.EW)
     
    conteneur_affichage.grid(row=1, column=2, sticky=tk.NS+tk.EW, padx=3, pady=3)
    conteneur_widget.grid(row=0, column=1, sticky=tk.NS+tk.EW, padx=3, pady=3)
    fenetre.rowconfigure(0, weight=1)
    fenetre.columnconfigure(1, weight=1)
     
    remplir_liste("./")
     
    fenetre.mainloop()

  6. #6
    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,

    Citation Envoyé par marco056 Voir le message
    Pouvez-vous m'aiguiller ?
    Si vous postez 160 et + lignes de code où il faut deviner quoi est dans quoi... pas grand monde aura la patience de prendre feuille de papier et un crayon pour déchiffrer ce bazar.

    Simplifiez, postez un code minimal qui reproduise le problème que vous cherchez à résoudre...

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

  7. #7
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Bon, et bien en épurant, je crois que j'ai trouvé le pb. Merci et désolé...

  8. #8
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Salut,

    Citation Envoyé par marco056 Voir le message
    Bon, je crois avoir compris quelques subtilités mais j'ai encore un problème.
    Je souhaite que mon texte "Présent ici" soit au-dessus de ma fenetre d'affichage du texte.
    Pouvez-vous m'aiguiller ?
    Tu pourrais remplacer affichage_texte.grid(row=0, column=2, sticky=tk.NS+tk.EW) par affichage_texte.grid(row=1, column=1, sticky=tk.NS+tk.EW)...

    Mais bon apparemment tu as déjà trouvé...

  9. #9
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Oui, merci. Et j'ai pigé un truc concernant les Frame... Beaucoup de choses compliquées pour moi encore dans tkinter mais je progresse...

  10. #10
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Il y a des outils qui aident à faire des interfaces graphiques, certains sont plutôt bien mais je n'en ai pas encore trouvé un bon pour tkinter...

  11. #11
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Bon, j'ai à nouveau un problème. Voici mon code :
    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
    import tkinter as tk
    from tkinter.scrolledtext import ScrolledText
     
    def quit():
        fenetre.destroy()
     
    fenetre = tk.Tk()
    fenetre.title("Recherche d'une chaîne")
     
    ##############################################################
    conteneur_fichiers = tk.Frame(fenetre)
     
    conteneur_fichiers.columnconfigure(0, weight=1)
    conteneur_fichiers.rowconfigure(1, weight=1)
     
    tk.Label(
        conteneur_fichiers,
        text="--------------------------------"
    ).grid(row=1, column=0, sticky=tk.EW)
     
    ##############################################################
    conteneur_affichage = tk.Frame(fenetre)
     
    affichage_texte = ScrolledText(
        conteneur_affichage,
        bg="white",
        fg="blue",
        font="sans 9 bold",
        height=8,
        width=70,
    )
    affichage_texte.grid(row=1, column=1, sticky=tk.NS+tk.EW)
     
    ##############################################################""
    conteneur_commandes = tk.Frame(fenetre)
     
    tk.Button(
        conteneur_commandes,
        text="Quitter",
        font='Helvetica 12 bold', bg='white', fg='blue', activebackground='light cyan', activeforeground='red',
        command=quit
    ).grid(row=11, column=1, sticky=tk.NS+tk.EW)
     
    ##############################################################
    conteneur_fichiers.grid(row=0, column=0, sticky=tk.NS+tk.EW, padx=5, pady=5)
    conteneur_commandes.grid(row=0, column=1, sticky=tk.NS+tk.EW, padx=3, pady=3)
    conteneur_affichage.grid(row=0, column=2, sticky=tk.NS+tk.EW, padx=3, pady=3)
     
    conteneur_affichage.rowconfigure(1, weight=1)
    conteneur_affichage.columnconfigure(0, weight=1)
     
    fenetre.rowconfigure(0, weight=1)
    fenetre.columnconfigure(1, weight=1)
    fenetre.mainloop()
    Je souhaiterais que lorsque je redimensionne la fenetre, ce soit le conteneur_affichage qui augmente de largeur. J'avais ce comportement avant que j'ai perdu, je ne sais pas pourquoi...
    A bientôt.

  12. #12
    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,

    Citation Envoyé par marco056 Voir le message
    Je souhaiterais que lorsque je redimensionne la fenetre, ce soit le conteneur_affichage qui augmente de largeur. J'avais ce comportement avant que j'ai perdu, je ne sais pas pourquoi...
    Bravo pour avoir fait l'effort de réduire votre code mais si vous voulez arriver à le relire, il faut mettre plus de jus.

    Pour que "conteneur_affichage qui augmente de largeur" lorsque "je redimensionne la fenetre", il faut que l'espace disponible soit assigné à la "colonne" du grid dans lequel on a placé la Frame.
    Dans votre code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conteneur_affichage.grid(row=0, column=2, sticky=tk.NS+tk.EW, padx=3, pady=3)
    dit que c'est la colonne 2 de la fenêtre principale.
    Mais "fenetre.columnconfigure(1, weight=1)" dit que c'est à la colonne 1 qu'on donne l'espace supplémentaire.

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

  13. #13
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Cette solution semble convenir mais je ne la comprends pas trop :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    conteneur_fichiers.grid(row=0, column=0, sticky=tk.NS+tk.EW, padx=5, pady=5)
    conteneur_commandes.grid(row=0, column=1, sticky=tk.NS+tk.EW, padx=3, pady=3)
    conteneur_affichage.grid(row=0, column=2, sticky=tk.NS+tk.EW, padx=3, pady=3)
     
    conteneur_affichage.rowconfigure(0, weight=1)
    conteneur_affichage.columnconfigure(1, weight=1)
     
    fenetre.rowconfigure(0, weight=1)
    fenetre.columnconfigure(2, weight=2)
    Pour les grid, a priori, ok (enfin j'espère).
    Cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enetre.columnconfigure(2, weight=2)[
    indique que la colonne 2 possède un poids 2 fois supérieur, c'est cela ?
    Je ne comprends pas non plus pourquoi je suis obligé de mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    conteneur_affichage.columnconfigure(1, weight=1)
    J'ai cherché de la doc sur internet mais pas trop de colomnconfigure avec des Frame.
    Merci en tous cas.

  14. #14
    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,

    Décomposez.

    La fenêtre principale est organisée en "grille" et on demande à ce que la place disponible aille sur la colonne 2.

    A cet endroit, on y a placé une Frame qui récupère cet espace (a cause du sticky).
    Si les widgets de la Frame sont organisés en grille, on recommence pour savoir à quelle colonne donner cet espace supplémentaire.

    Ce n'est pas la même grille que celle de la fenêtre principale.

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

  15. #15
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Merci, je crois que j'ai encore du boulot mais il va bien falloir que j'intègre ces grilles.

  16. #16
    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,

    Il faut partir d'exemples simples:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import tkinter as tk
     
    root = tk.Tk()
     
    root.columnconfigure(0,weight=1)
    root.columnconfigure(1,weight=2)
     
    frame = tk.Frame(root, width=100, height=50, bg='blue')
    frame.grid(row=0, column=0)
    frame = tk.Frame(root, width=200, height=100, bg='green')
    frame.grid(row=0, column=1, sticky='ew')
     
    tk.mainloop()
    On donne deux fois plus d'espace à la colonne 1 qu'à la colonne 0.
    La frame de la colonne 1 étant sticky, c'est elle qui s'agrandit alors que pour la colonne 0, la frame ne récupère pas la place mais la case s'agrandit.

    Après, si vous voulez "compliquer" le contenu des frames et garder la même structure, pousser les complications dans des fonctions:
    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
    import tkinter as tk
     
    def create_frame1(master=None):
        frame = tk.Frame(master, width=100, height=50, bg='blue')
        #...
        return frame
     
    def create_frame2(master=None):
        frame = tk.Frame(master, bg='green')
        tk.Text(frame).pack(fill='x')
        return frame
     
    root = tk.Tk()
     
    root.columnconfigure(0,weight=1)
    root.columnconfigure(1,weight=2)
     
    frame = create_frame1(root)
    frame.grid(row=0, column=0)
    frame = create_frame2(root)
    frame.grid(row=0, column=1, sticky='ew')
     
    tk.mainloop()
    Sinon, çà va être galère de savoir ce qu'on doit modifier.

    Puis si les fonctions sont un peu trop limitées, vous pouvez utiliser des "class".

    C'est pas pour rien que les débuts de la POO se font avec les interfaces graphiques: il faut des tas de lignes de code pour faire 3 fois rien: fonctions et class permettent de "ranger" et "tester" indépendament pour s'y retrouver.

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

  17. #17
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Merci, je crois que j'ai compris.
    Pour les class, je repousse d'année en année mais il va bien falloir sauter le pas à un moment donné.

Discussions similaires

  1. Configuration BDD standby avec grid control
    Par ricoflashfire dans le forum Administration
    Réponses: 0
    Dernier message: 29/12/2009, 10h41
  2. impossible d'utiliser sticky avec grid
    Par scheme dans le forum Tkinter
    Réponses: 2
    Dernier message: 24/07/2009, 11h48
  3. Monitorer des bases MYSQL avec Grid Control ?
    Par ryukei dans le forum Entreprise Manager
    Réponses: 2
    Dernier message: 17/07/2009, 15h03
  4. Application server control avec Grid control
    Par JacK_soN dans le forum Entreprise Manager
    Réponses: 1
    Dernier message: 15/06/2009, 13h07
  5. [SWING] Donner la taille à un Panel avec Grid Layout
    Par Goupo dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 08/06/2007, 00h58

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