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

GUI Python Discussion :

Un projet parsemé d'embûches


Sujet :

GUI Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Par défaut Un projet parsemé d'embûches
    Bonjour tout le monde ! Je suis depuis quelques temps sur un projet qui nécessite d'utiliser tkinter. Étant plutôt nul en programmation, et particulièrement en ce qui concerne les interfaces graphiques, je suis venu vous demander, que dis-je, vous implorer de m'aider. Quelques explications s'imposent: je cherche pour l'instant à afficher une simple fenêtre avec sur la gauche un canvas et sur la droite un menu, qui n'est en fait qu'une frame. La création du canvas n'a posé aucun soucis. Celle de la frame, en revanche, me donne du fil à retordre. J'ai réussi à créer la dite frame mais je n'arrive pas à créer un widget correct contenu dans cette frame. Je 'explique: j'ai essayé de créer dans un premier temps une simple ligne de texte (Label) contenue dans la frame et positionnée tout en haut de celle-ci. Problème, lorsque j'effectue le code, le texte apparaît en plein milieu sur la gauche de la frame. Pour éclaircir la situation, j'ai changé le fond de la frame pour voir si elle apparaissait toujours à l'écran et surprise elle n'apparaissait pas. Mes questions sont donc les suivantes: Y a t-il un problème de propagation du label dans la frame qui fasse que celui-ci recouvre toute la frame? Comment régler ce problème?

    Voici le code:Le code.py

    Merci d'avance pour votre aide plus que précieuse! À plus!

  2. #2
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Salut,

    Tu as besoin d'user d'un columnconfigure sur le parent de ta frame, et d'un sticky dans le grid de ta frame.

    En gros (j'ai modifié la dimension)

    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
    from tkinter import *
     
    Fenetre = Tk()
    Fenetre.title("Fenetre")
    Fenetre.geometry('%dx%d+%d+%d' %(850,600,-10,0))
     
    Fenetre.columnconfigure(1, weight=1)
    Menu_droite = Frame(Fenetre, bg="darkblue", relief=GROOVE, width=350,height=600)
    Menu_droite.grid(row = 0,column = 1, sticky=NSEW)
     
    command = Label(Menu_droite, text = "Commandes")
    command.grid(row = 0,column = 0)
     
    zone_graphique = Canvas(Fenetre,bg='white',width=500,height=600)
    zone_graphique.grid(row = 0, column = 0)
     
    Fenetre.mainloop()
    NSEW est une constante tkinter.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Par défaut
    Merci infiniment pour ta réponse! J'ai juste une petite question: à quoi sert le columnconfigure et que représentent les deux paramètres qu'il contient? J'imagine que le weight correspond au nombre de colonne dans la fenêtre, mais je ne vois pas à quoi correspond le premier 1. J'ai déjà entendu parlé de sticky également avec les lettres, N, S, W, E qui permettent d'aligner les objets soit par le haut, le bas ou par rapport à la gauche ou la droite. Mais pourquoi faut-il mettre les quatre lettres dans ce cas précis?

  4. #4
    Membre très actif

    Homme Profil pro
    Bidouilleur
    Inscrit en
    Avril 2016
    Messages
    721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bidouilleur

    Informations forums :
    Inscription : Avril 2016
    Messages : 721
    Billets dans le blog
    1
    Par défaut
    Les 4 lettres sont les points cardinaux, donc pour indiquer qu'on souhaite qu'il occupe tout l'espace (enfin en gros résumé), le columnconfigure, euh la doc l'expliquera mieux que moi, mais en très simple, c'est pour indiquer de donner plus de « poids » à la colonne 1, ce qui induit ce comportement.

    Table 2. Column and row configuration options for the .grid() geometry manager
    minsize The column or row's minimum size in pixels. If there is nothing in the given column or
    row, it will not appear, even if you use this option.
    pad A number of pixels that will be added to the given column or row, over and above the
    largest cell in the column or row.
    weight To make a column or row stretchable, use this option and supply a value that gives the
    relative weight of this column or row when distributing the extra space. For example, if
    a widget w contains a grid layout, these lines will distribute three-fourths of the extra
    space to the first column and one-fourth to the second column:
    w.columnconfigure(0, weight=3)
    w.columnconfigure(1, weight=1)
    If this option is not used, the column or row will not stretch.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Par défaut
    Merci bien!

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 8
    Par défaut
    Je sais que je commence à devenir barbant, mais j'ai tenté de refaire le programme en plaçant cette fois-ci la frame non pas à droite comme précédemment mais en bas. J'ai voulu ensuite créer une autre frame de taille définie à l'intérieur de la première. Dans cette nouvelle frame j'ai ensuite voulu mettre deux boutons qui occupent tout l'espace selon les x mais sans modifier la taille de la frame, i.e. sans qu'elle s'adapte à la taille des deux boutons. Problème, elle s'adapte. Comment faire?

    Voici le nouveau programme:Le code.py

Discussions similaires

  1. Qu'est ce qu'un grand projet ?
    Par Geronimo dans le forum Débats sur le développement - Le Best Of
    Réponses: 62
    Dernier message: 04/04/2013, 14h52
  2. [Delphi] Association composants-projet
    Par Pierre Castelain dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/07/2002, 16h20
  3. Parametrage des options de projet
    Par ares7 dans le forum EDI
    Réponses: 7
    Dernier message: 22/07/2002, 15h33
  4. Réponses: 6
    Dernier message: 21/06/2002, 14h48
  5. Les fichiers d'un projet
    Par Manolo dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/05/2002, 17h51

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