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

Python Discussion :

Probleme affichage boutons [Python 2.X]


Sujet :

Python

  1. #1
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut Probleme affichage boutons
    Bonjour,

    J'ai un souci avec l'affichage des boutons radio qui sont toujours justifés + je voudrais placer les deux boutons 'valider' et 'quitter' en bas l'un à cote de l'autre
    Si je veux placer un label au dessus des radiobouton il ne s'affiche pas
    donc il y a un souci d'ordre ou de commande et les commandes pack() et grid() ne sont pas mélangés.

    merci

    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
     
    # -*- coding: utf-8 -*-
    from Tkinter import *
     
    def afficher(): #  valeur retour
      print retour.get()
     
    racine=Tk()
    #Frame
    cadre0=Frame(racine)
    retour=IntVar()
    Label(cadre0, text=" 1er").grid(row=0, column=0)
    b1=Radiobutton(cadre0, text="xxxxxxxxx", variable=retour, value=1)
    b2=Radiobutton(cadre0, text="xxxxxxxxxxx", variable=retour, value=2)
    b3=Radiobutton(cadre0, text="xxxxxxxxxxxxx", variable=retour, value=3)
    b4=Radiobutton(cadre0, text="xxxxxxxxxxxxxxxx", variable=retour, value=4)
    b1.grid(row=0, column=0)
    b2.grid(row=1, column=0)
    b3.grid(row=2, column=0)
    b4.grid(row=3, column=0)
    cadre0.pack(side=LEFT)
     
    # création d'un widget 'Canvas' contenant une image gif :
    can1 = Canvas(racine, width =160, height =160)
    photo = PhotoImage(file ='image.gif')
    item = can1.create_image(80,80, image =photo)
    can1.pack(side=RIGHT)
     
    bouton=Button(racine,  text="Valider", command=afficher).pack(side=BOTTOM,expand=True)
    boutonq=Button(racine, text="Quitter",compound="top",command=racine.destroy).pack(side=BOTTOM,expand=True)
     
     
    racine.mainloop()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 395
    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 395
    Points : 36 950
    Points
    36 950
    Par défaut
    Salut,

    Si vous placez deux widgets en (row=0, column=0) quel est celui qui sera affiché en cet emplacement?

    - W

  3. #3
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    je viens de modifier ,c'est mieux mais je ne maîtrise pas bien. la gestion des 2 boutons n'est pas top dans l'espace

    1- le label
    2- en dessous du label les boutons radio
    3- en dessous des BR le bouton valider et Quitter l'un à cote de l'autre
    4- A droite l'image


    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
     
    racine=Tk()
    #Frame
    cadre0=Frame(racine)
    retour=IntVar()
    Label(cadre0, text="titre ********",fg='blue').grid(row=1, column=2)
    b1=Radiobutton(cadre0, text="- xxxxxxxxxxxxxxxxx--", variable=retour,indicatoron=0,borderwidth=1,padx =45, pady =8,value=1).grid(row=8, column=2)
    b2=Radiobutton(cadre0, text="- xxxxxxxxxxxxxxxxxxx", variable=retour,indicatoron=0,borderwidth=1,padx =45, pady =8,value=2).grid(row=10, column=2)
    b3=Radiobutton(cadre0, text="- xxxxxxxx-----------", variable=retour,indicatoron=0,borderwidth=1,padx =36, pady =8,value=3).grid(row=12, column=2)
    b4=Radiobutton(cadre0, text="- xxxxxxxxxxxxx------", variable=retour,indicatoron=0,borderwidth=1,padx =41, pady =8,value=4).grid(row=14, column=2)
     
    cadre0.pack(side=LEFT)
     
    # création d'un widget 'Canvas' contenant une image bitmap :
    can1 = Canvas(racine, width =160, height =160)
    photo = PhotoImage(file ='image.gif')
    item = can1.create_image(80,80, image =photo)
    can1.pack(side=RIGHT)
     
    boutonq=Button(racine, text="Quitter", command=racine.destroy).pack(side=BOTTOM,padx =4, pady =18)
    bouton=Button(racine,  text="Valider", command=afficher).pack(side=BOTTOM,padx =4, pady =38)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 395
    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 395
    Points : 36 950
    Points
    36 950
    Par défaut
    Citation Envoyé par Thierry_V Voir le message
    je viens de modifier ,c'est mieux mais je ne maîtrise pas bien. la gestion des 2 boutons n'est pas top dans l'espace

    1- le label
    2- en dessous du label les boutons radio
    3- en dessous des BR le bouton valider et Quitter l'un à cote de l'autre
    4- A droite l'image
    Hmmm.... Il faut prendre en compte la hiérarchie des "windows".
    En fait, "racine = tk.Tk()" crée la fenêtre de l'application qui apparaît comme un rectangle.
    C'est le niveau 0.
    Dans cette racine, vous créez un "cadre0 = tk.Frame(racine)".
    Vous le remplissez... puis vous l'affichez sur la partie "gauche" : .pack(side=LEFT)
    Vous créez ensuite un Canvas que vous affichez à droite.
    Puis deux Button affichés en dessus.
    Le niveau 1 est le remplissage de cadre0... à la limite ce qu'il contient est "transparent" pour le niveau "au dessus" (pourvu qu'on voit les widgets qu'on a mis dedans).
    Simplifions:
    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
    from tkinter.constants import *
     
    def do_validate():
        pass
     
    def create_frame(app=None):
        frame = tk.Frame(app, width=100, height=100, bg='blue')
        return frame
     
    def create_canvas(app=None, image=None):
        canvas = tk.Canvas(app, height=200, width=200, bg='red')
        return canvas
     
    app = tk.Tk()
    frame = create_frame(app)
    frame.pack(side=LEFT)
    canvas = create_canvas(app)
    canvas.pack(side=RIGHT)
     
    tk.Button(app, text='Quit', command=app.quit).pack(side=BOTTOM)
    tk.Button(app, text='Valider', command=do_validate).pack(side=BOTTOM)
    tk.mainloop()
    Dans ce code, on se fout un peu des détails de ce que contiennent "frame" (cadre0) et canvas (can1).
    Par contre, j'isole la construction de leur contenu dans les fonctions create_xxx (c'est d'un niveau inférieur) pour souligner que c'est l'appelant qui dispose les widgets sur le "display". Les paramètres height, width traduisent juste que ce contenu prendra de la place

    Écrit comme çà, le gestionnaire de disposition (.pack) fait ce qu'il peut, c'est "moche".
    Ajoutons des niveaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    app = tk.Tk()
    f1 = tk.Frame(app)
    frame = create_frame(f1)
    frame.pack(side=LEFT)
    canvas = create_canvas(f1)
    canvas.pack(side=RIGHT)
    f1.pack()
     
    f2 = tk.Frame(app)
    tk.Button(f2, text='Quit', command=app.quit).pack(side=LEFT)
    tk.Button(f2, text='Valider', command=do_validate).pack(side=RIGHT)
    f2.pack()
     
    tk.mainloop()
    On obtient un truc qui est déjà un peu moins moche...
    Juste en forçant les différents widgets à s'afficher dans des boîtes (i.e. des "rectangles") dont la disposition des contenus sera gérée indépendamment.

    - W

  5. #5
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Re

    Bon, j'ai a réfléchir là, merci, dès que j'ai réalisé de la façon que je veux l'interface je la place
    merci

  6. #6
    Membre régulier Avatar de Thierry_V
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Août 2013
    Messages : 153
    Points : 82
    Points
    82
    Par défaut
    Bonjour,

    Il suffit de mettre par exemple pour 3 affichages la position TOP pour chaque

    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
     
    Radiobutton(
                cadre0,
                text="-bbbbbbbbbbbbbbbb",
                variable=retour,
                value=1
                ).pack(side=TOP, **opts)
     
            Radiobutton(
                cadre0,
                text="- aaaaaaaaaaaaaaaa",
                variable=retour,
                value=2
                ).pack(side=TOP, **opts)
     
    etc....
    merci pour les explications, c'est très instructif,
    thierry

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

Discussions similaires

  1. Probleme d'affichage boutons joystick, DirectX
    Par cutprod dans le forum VB.NET
    Réponses: 1
    Dernier message: 12/05/2010, 19h32
  2. probleme affichage de boutons
    Par mimiic dans le forum Flash
    Réponses: 0
    Dernier message: 18/01/2010, 17h44
  3. Probleme Affichage/Suppression boutons radio
    Par xEndLe dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 06/06/2009, 13h26
  4. probleme affichage bouton CSS IE6 vs IE7 et FF2
    Par Bam chika wah wah! dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 19/11/2007, 09h50

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