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 :

Interface graphique: positionnement image


Sujet :

Tkinter Python

  1. #1
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut Interface graphique: positionnement image
    Bonjour,

    J'ai réalisé une interface graphique, lors de l'insertation d'une image, un espace se crée entre le bord de la fenetre et les autres boutons.


    Comment supprimer cet espace, afin que je puisse positionner mon image dans le coin en haut à droite?
    Et aussi coment faire, pour positionner l'ensemble des boutons en dessous de la "ligne" ou se trouve l'image?

    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
     
    fenetre=Tk()
     
    #configuration fenêtre
    fenetre.geometry("800x480+10+10")
    fenetre.title("Test") # titre de la fenetre
    fenetre.minsize(400, 300) # taille minimum de la fenetre
    fenetre.maxsize(1024,768) # taille maximum de la fenetre
    fenetre.positionfrom("user") # placement manuel de la fenetre
    fenetre.sizefrom("user") # dimensionnement manuel de la fenetre
     
    #=======Frame 1
    frame1=Frame(fenetre, width=60, height=60, padx=10, pady=10)
    frame1.grid(row=1, column=2)
     
     
    bouton1=Button(frame1,text="bouton1", command= fenetre, padx=10, pady=10, width=10)
    bouton1.config(font=('arial', 12, 'bold'))
    bouton1.grid(row=1, column=1)
     
     
    bouton2=Button(frame1,text="bouton2", command= fenetre, padx=10, pady=10, width=10)
    bouton2.config(font=('arial', 12, 'bold'))
    bouton2.grid(row=1, column=2)
     
     
    bouton3=Button(frame1,text="bouton3", command= fenetre, padx=10, pady=10, width=10)
    bouton3.config(font=('arial', 12, 'bold'))
    bouton3.grid(row=2, column=1)
    valueADC=StringVar()
    label9=Label(frame1, textvariable=valueADC, width=12, height=2)
    label9.config(font=('arial', 15, 'bold'))
    label9.grid(row=2, column=2)
    #label9.config(text=valueADC)
     
    #=======Frame 2
    frame2=Frame(fenetre, width=60, height=60, padx=10, pady=10)
    frame2.grid(row=1, column=3)
     
    bouton3=Button(frame2,text="bouton4", command= fenetre, padx=10, pady=10, width=10)
    bouton3.config(font=('arial', 12, 'bold'))
    bouton3.grid(row=1, column=1)
     
     
    bouton4=Button(frame2,text="bouton5", command= fenetre, padx=10, pady=10, width=10)
    bouton4.config(font=('arial', 12, 'bold'))
    bouton4.grid(row=1, column=2)
     
     
    bouton3=Button(frame2,text="bouton6", command= fenetre, padx=10, pady=10, width=10)
    bouton3.config(font=('arial', 12, 'bold'))
    bouton3.grid(row=2, column=1)
     
     
    bouton4=Button(frame2,text="bouton7", command= fenetre, padx=10, pady=10, width=10)
    bouton4.config(font=('arial', 12, 'bold'))
    bouton4.grid(row=2, column=2)
     
     
    #Date-------------------------------
    heure = StringVar()
    #label4=Label(fenetre, text="Date:")
    #label4.grid(row=1, column=1)
    label5=Label(fenetre, textvariable=heure)
    label5.grid(row=0, column=2)
    timer_date()
     
    photo = PhotoImage(file="Exemple.GIF")
    canvas = Canvas(fenetre, width=350, height=200)
    canvas.create_image(50, 50, image=photo )
    canvas.grid(row=1, column=4, sticky=N)
     
    #=======Frame 3
    frame3=Frame(fenetre, width=60, height=60, padx=10, pady=10)
    frame3.grid(row=2, column=2, columnspan=2)
     
     
    #Bouton quitter
    bouton4=Button(frame3,text="Quitter", command=fenetre.destroy,width=10, height=2, padx=10, pady=10)
    bouton4.config(font=('arial', 12, 'bold'))
    bouton4.grid(row=1,column=1)
     
    fenetre.mainloop()

    Note: je n'ai pas réussi à insérer la capture de mon interface, dans ce message.

    En vous remerciant.

    Cordialement.

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

    Peut être en utilisant un Label pour afficher l'image au lieu d'un canvas de 350x200.
    Et si vous voulez qu'il soit placé au dessus des buttons, il faut utiliser la row=0 et non la row=1.

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

  3. #3
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Merci pour votre retour.

    Je pensais que l'insertion d'une image ne se faisait qu'avec des canvas...

  4. #4
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    J'ai une autre question concernant la fonction des widget.

    J'ai créer un boutton dont la commande permet l'activation d'une fonction ( permettant acquisition de données). Je voudrais via un bouton arrêter cette fonction.

    Ainsi, est ce qu'il existe un évenement command qui permet d'arrêter le processus d'une fonction?


    bouton=Button(fenetre,text="arrêt acquisition ", command= ??)


    En vous remerciant.

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

    Citation Envoyé par Cerise22 Voir le message
    J'ai créer un boutton dont la commande permet l'activation d'une fonction ( permettant acquisition de données). Je voudrais via un bouton arrêter cette fonction.

    Ainsi, est ce qu'il existe un évenement command qui permet d'arrêter le processus d'une fonction?
    A la base, une fonction ne permet pas de faire autre chose avant qu'elle soit terminée.
    Tant qu'une fonction est "active", impossible pour le GUI de traiter un évènement comme lancer le callback associé à un bouton.
    Si vous n'utilisez pas proprement certains termes techniques, impossible de comprendre ce que vous racontez (et donc de vous aider).
    Le plus simple est de poster du code qui illustre tout çà.

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

  6. #6
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    Voici le 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
     
     
    values = []
    def acquisition ():
        for i in range(10): 
            vals = adc.read_adc(1, gain=GAIN)  
            values.append(vals) 
            print('| {0:>6}  |'.format(vals))
            valueADC.set(values)
     
     
    fenetre=Tk()
     
    #Bouton Afficher les valeurs d'acquisition
    bouton3=Button(fenetre,text="Données", command= acquisition, padx=10, pady=10, width=10)
    bouton3.config(font=('arial', 12, 'bold'))
    bouton3.grid(row=2, column=1)
    valueADC=StringVar()
    label9=Label(fenetre, textvariable=valueADC, width=12, height=2)
    label9.config(font=('arial', 15, 'bold'))
    label9.grid(row=2, column=2)
     
    fenetre.mainloop()
    Je voudrais arrêter l'affichage des données d'acquisitions dans le label, en quelque sorte "arrêter la fonction".

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Cerise22 Voir le message
    Voici le 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
     
     
    values = []
    def acquisition ():
        for i in range(10): 
            vals = adc.read_adc(1, gain=GAIN)  
            values.append(vals) 
            print('| {0:>6}  |'.format(vals))
            valueADC.set(values)
     
     
    fenetre=Tk()
     
    #Bouton Afficher les valeurs d'acquisition
    bouton3=Button(fenetre,text="Données", command= acquisition, padx=10, pady=10, width=10)
    bouton3.config(font=('arial', 12, 'bold'))
    bouton3.grid(row=2, column=1)
    valueADC=StringVar()
    label9=Label(fenetre, textvariable=valueADC, width=12, height=2)
    label9.config(font=('arial', 15, 'bold'))
    label9.grid(row=2, column=2)
     
    fenetre.mainloop()
    Je voudrais arrêter l'affichage des données d'acquisitions dans le label, en quelque sorte "arrêter la fonction".
    Dans le code que vous avez posté la fonction/callback acquisition est seulement exécutée lorsqu'on clique sur le Button qui affiche "Données". Le Label est mis à jour via la variable valueADC une dizaine de fois vu que vous avez placé valueADC.set dans la boucle for. Ca ne sert à rien mais çà ne se voit pas: vous ne verrez que la dernière valeur affichée (une liste de nombres). Pour arrêter les mises à jour, il suffit de ne pas cliquer sur le Button.

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

  8. #8
    Membre du Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2016
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2016
    Messages : 87
    Points : 43
    Points
    43
    Par défaut
    J'ai oublié une ligne de mon code, désolé...



    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
    
    values = []
    def acquisition ():
        for i in range(10): 
            vals = adc.read_adc(1, gain=GAIN)  
            values.append(vals) 
            print('| {0:>6}  |'.format(vals))
            valueADC.set(values)
            label9.after(100,ADC)
     
     
    fenetre=Tk()
     
    #Bouton Afficher les valeurs d'acquisition
    bouton3=Button(fenetre,text="Données", command= acquisition, padx=10, pady=10, width=10)
    bouton3.config(font=('arial', 12, 'bold'))
    bouton3.grid(row=2, column=1)
    valueADC=StringVar()
    label9=Label(fenetre, textvariable=valueADC, width=12, height=2)
    label9.config(font=('arial', 15, 'bold'))
    label9.grid(row=2, column=2)
     
    fenetre.mainloop()
    Donc le fait d'arrêter de cliquer sur le bouton n'arrête pas le processus

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Ah c'est mieux.
    Ben, .after(...) retourne un identifiant correspondant à ce qui sera appelé plus tard.
    Vous le stockez dans une variable (ici globale) : identifiant
    Et pour arrêter, vous effectuez un .after_cancel(identifiant).

    Exemple de 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
    >>> import tkinter as tk
    >>> ident = None
    >>> count = 0
    >>> def on_timer(delay=20):
    ...     global count, ident
    ...     count += 1
    ...     label['text'] = count
    ...     ident = label.after(delay, on_timer)
    ...
    >>> label = tk.Label()
    >>> label.pack()
    >>> tk.Button(text='cancel', command=lambda: label.after_cancel(ident)).pack()
    <tkinter.Button object at 0x0000000002EA26A0>
    >>> on_timer()
    >>> tk.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. utiliser une image comme fond d'une interface graphique
    Par élève_ingénieur dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 01/12/2009, 21h28
  2. Création d'une image dans l'interface graphique
    Par fcboumi13 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 02/06/2009, 23h21
  3. interface graphique pour traitement d'image
    Par spinalrock dans le forum Interfaces Graphiques
    Réponses: 29
    Dernier message: 10/06/2008, 14h49
  4. image dans une interface graphique
    Par merdassiahmad dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 08/04/2008, 11h04

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