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 :

Tkinter, formulaire, probleme radiobutton et zone de texte


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut Tkinter, formulaire, probleme radiobutton et zone de texte
    Bonjour à tous,
    Je viens vers vous pour quelques problèmes que je n'arrive pas à régler seul...
    J'ai du créer un code python, qui m'affiche un formulaire et qui me renvoie dans un fichier texte une phrase du genre "Bonjour mr.............."
    Jusque la tout vas bien, cela dit j'ai quelques imperfections dans mon formulaire que je n'arrive pas à regler

    1) Bouton radio : Lorsque je réinitialise mon formulaire, a l'aide du fonction et d'un bouton, mes boutons radio "homme" et "femme" se sélectionne automatiquement. Ca n'a aucun incident sur le fonctionnement mais je ne comprend pas d'ou ca vient (Je vais vous mettre mon code plus bas pour que vous tester et comprenez : Cliquez sur homme ou femme, cliquez sur réinitialiser, regardez ce qu'il se passe aux boutons radio)

    2) Zone de texte : J'ai créer un champ texte qui s’étend sur 3 lignes pour pouvoir y mettre des commentaires (Champ commentaires)
    2 problèmes :
    -Mon curseur pour écrire du texte, se met au milieu de la zone, et non pas en haut de le zone
    -Lorsque j'ecris un long commentaire, une fois arrivé a la fin de ma zone, il n'y a pas de retour à ligne

    Pour mieux comprendre, lancer mon code, cliquer sur la case commentaires, écrivez une longue chaîne de caractère

    J’espère avoir été assez clair, c'est pas évident d'expliquer.... en vous remerciant d'avance !

    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
    from tkinter import *
    import tkinter.messagebox
    import tkinter
     
     
    def effacer():
        Champ.delete(0,END)
        Champ2.delete(0,END)
        Champ3.delete(0,END)
        Champ4.delete(0,END)
        Champ5.delete(0,END)
        Champ6.delete(0,END)
        Champ7.delete(0,END)
        C1.deselect()
        C2.deselect()
        C3.deselect()
        C4.deselect()
        C5.deselect()
        C6.deselect()
        homme.deselect()
        femme.deselect()
     
    def envoyer():
     
        if (sex.get()==1):
            x="Mr"
        elif (sex.get()==2):
            x="Mme"
     
        aa=""
        bb=""
        cc=""
        dd=""
        ee=""
        ff=""
     
        if (c.get()==1):
            aa=" Cinema "
        if (e.get()==2):
            bb=" Equitation "
        if (p.get()==3):
            cc=" Planche "
        if (m.get()==4):
            dd=" Musique "
        if (t.get()==5):
            ee=" Theatre "
        if (r.get()==6):
            ff=" Rien "
     
        fichier= open('User.txt',"w")
        fichier.write("Bonjour " + x + " " + Nom.get() + " " + Prenom.get() + ", vous avez " + Age.get()+ " ans. Vous aimez" + aa + bb + cc + dd + ee + ff +". Nous avons bien noté vos commentaires : " + Commentaires.get())  
        fichier.close()
     
     
     
     
    fenetre= Tk()
     
     
    Nom = Label(fenetre, text = 'Nom : ')
    Nom.grid(column=0, row=0, sticky='w')
    Nom=StringVar()
    Champ = Entry(fenetre, textvariable= Nom, width=31)
    Champ.grid(column=1, row=0, sticky='sw', columnspan=2, padx=10)
     
    Prenom = Label(fenetre, text = 'Prénom : ',)
    Prenom.grid(column=0, row=1,sticky='w',pady=2)
    Prenom=StringVar()
    Champ2 = Entry(fenetre, textvariable= Prenom, width=31)
    Champ2.grid(column=1, row=1,columnspan=2)
     
     
     
    Age = Label(fenetre, text = 'Age : ')
    Age.grid(column=0, row=2, sticky='w',pady=2)
    Age=StringVar()
    Champ3 = Entry(fenetre, textvariable= Age,width=31)
    Champ3.grid(column=1, row=2,columnspan=2)
     
     
    Mail = Label(fenetre, text = 'Adresse mail : ')
    Mail.grid(column=0, row=3,sticky='w',pady=2)
    Mail=StringVar()
    Champ4 = Entry(fenetre, textvariable= Mail,width=31)
    Champ4.grid(column=1, row=3,columnspan=2)
     
     
    MDP = Label(fenetre, text = 'Mot de passe : ')
    MDP.grid(column=0, row=4,sticky='w', pady=2)
    MDP=StringVar()
    Champ5 = Entry(fenetre, textvariable= MDP,width=31, show='*')
    Champ5.grid(column=1, row=4,columnspan=2)
     
     
    MDP2 = Label(fenetre, text = 'Retapez votre mot de passe : ')
    MDP2.grid(column=0, row=5, sticky='w',pady=2)
    MDP2=StringVar()
    Champ6 = Entry(fenetre, textvariable= MDP2,width=31, show='*')
    Champ6.grid(column=1, row=5,columnspan=2)
     
     
    Commentaires = Label(fenetre, text = 'Commentaires : ')
    Commentaires.grid(column=0,row=6, sticky='w',pady=2)
    Commentaires=StringVar()
    Champ7 = Entry(fenetre, textvariable= Commentaires,width=31)
    Champ7.grid(column=1, row=6, ipady=25,columnspan=2)
     
     
    Sexe = Label(fenetre, text = 'Sexe : ')
    Sexe.grid(column=0,row=7, sticky='w',pady=2)
     
    sex=IntVar()
     
    homme= Radiobutton (fenetre, text="homme", variable=sex, value=1)
    homme.grid(column=1, row=7,sticky='sw')
    femme= Radiobutton (fenetre, text="femme", variable=sex, value=2)
    femme.grid(column=2, row=7,sticky='sw')
     
     
     
    Hobbies = Label(fenetre, text = 'Hobbies : ')
    Hobbies.grid(column=0,row=9, sticky='w',pady=2)
     
     
    c=IntVar()
    e=IntVar()
    p=IntVar()
    m=IntVar()
    t=IntVar()
    r=IntVar()
     
    C1= Checkbutton (text="Cinema", variable=c, onvalue=1, offvalue=0)
    C1.grid (column=1, row=8,sticky='sw')
     
    C2= Checkbutton (text="Equitation", variable=e, onvalue=2, offvalue=0)
    C2.grid (column=1, row=9, sticky='sw')
     
    C3= Checkbutton (text="Planche à voile", variable=p, onvalue=3, offvalue=0)
    C3.grid (column=1, row=10, sticky='sw')
     
    C4= Checkbutton (text="Musique", variable=m, onvalue=4, offvalue=0)
    C4.grid (column=2, row=8,sticky='sw')
     
    C5= Checkbutton (text="Theatre", variable=t, onvalue=5, offvalue=0)
    C5.grid (column=2, row=9, sticky='sw')
     
    C6= Checkbutton (text="Rien", variable=r, onvalue=6, offvalue=0)
    C6.grid (column=2, row=10, sticky='sw')
     
     
     
    Envoyer= Button (fenetre, text="envoyer",command=envoyer, pady=2)
    Envoyer.grid (column=1, row=11,sticky='sw', pady=20)
    Effacer= Button (fenetre, text="réeinitialiser", command=effacer, pady=2)
    Effacer.grid (column=2, row=11,sticky='sw',pady=20)
     
    fenetre.mainloop()

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,

    Pour le Radiobutton, .deselect() positionne la variable à la chaîne de caractère vide qui est aussi la valeur par défaut du "tristate" qui permet de gérer des sélections multiple.
    Soit vous positionnez la valeur de la variable à autre chose que les value associées aux différents Radiobutton (en évitant de passer par .deselect) ou les configurer avec un tristatevalue.

    2) Zone de texte : J'ai créer un champ texte qui s’étend sur 3 lignes pour pouvoir y mettre des commentaires (Champ commentaires)
    Dans votre code vous avez crée un widget Entry et difficile de lui faire avaler 3 lignes. Soit vous utilisez un widget Text (mais c'est compliqué) soit vous associez une Entry à chaque ligne.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut
    Hello, merci de ta réponse !

    Salut,

    Pour le Radiobutton, .deselect() positionne la variable à la chaîne de caractère vide qui est aussi la valeur par défaut du "tristate" qui permet de gérer des sélections multiple.
    Soit vous positionnez la valeur de la variable à autre chose que les value associées aux différents Radiobutton (en évitant de passer par .deselect) ou les configurer avec un tristatevalue.
    J'ai compris, j'ai trouvé une solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sex=IntVar(value=1)
     
    homme= Radiobutton (fenetre, text="homme", variable=sex, value=1)
    homme.grid(column=1, row=7,sticky='sw')
    femme= Radiobutton (fenetre, text="femme", variable=sex, value=2)
    femme.grid(column=2, row=7,sticky='sw')
    Et dans ma fonction effacer je rajoute :
    J'ai initialisé le bouton sur homme au démarrage et à la réinitialisation, ta réponse m'a aider, j'ai compris d'ou venez le probleme

    Dans votre code vous avez crée un widget Entry et difficile de lui faire avaler 3 lignes. Soit vous utilisez un widget Text (mais c'est compliqué) soit vous associez une Entry à chaque ligne.
    Associez un Entry a chaque ligne ? je vois pas ?
    J'ai fais des test mais il me met 3 champs à la suite, comment les fusionner ?
    J'ai vu les fonctionnalités du widget text, effectivement ca correspond plus, mais je comprend rien (pour récupérer une variable)

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par chokizi Voir le message
    Associez un Entry a chaque ligne ? je vois pas ?
    J'ai fais des test mais il me met 3 champs à la suite, comment les fusionner ?
    J'ai vu les fonctionnalités du widget text, effectivement ca correspond plus, mais je comprend rien (pour récupérer une variable)
    C'est toute la différence entre 3 lignes de texte (3 x Entry) et un texte de 3 lignes (le widget Text).
    Dans le premier cas (Entry) il va vous falloir coder, récupérer le contenu de chaque entrée pour faire un texte et trouver des jongleries pour que çà reste utilisable. Dans l'autre, il va falloir apprendre à vous servir du widget Text.

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est toute la différence entre 3 lignes de texte (3 x Entry) et un texte de 3 lignes (le widget Text).
    Dans le premier cas (Entry) il va vous falloir coder, récupérer le contenu de chaque entrée pour faire un texte et trouver des jongleries pour que çà reste utilisable. Dans l'autre, il va falloir apprendre à vous servir du widget Text.

    - W
    J'ai mis un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Commentaires = Label(fenetre, text = 'Commentaires : ')
    Commentaires.grid(column=0,row=6, sticky='w',pady=2)
    Commentaires=StringVar()
    Champ7 = Text(fenetre,width=23, height=2)
    Champ7.grid(column=1, row=6, ipady=15,columnspan=2)
    Ma case commentaire est bien présente, comme je le souhaite, cependant si tu pouvais me donner la commande pour récupérer avec un get ?
    Je cherche depuis hier soir je trouve que des truc style
    "contents = text.get(1.0, END)" mais ca marche pas

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par chokizi Voir le message
    Je cherche depuis hier soir je trouve que des truc style
    "contents = text.get(1.0, END)" mais ca marche pas
    Si je vous donne la page de la documentation à lire, je ne vois pas ce que vous cherchez.
    Ici est raconté que text.get prend deux "index" en paramètre (le deuxième étant optionnel).
    Text.get(index1, index2=None)

    Utilisez cette méthode pour récupérer le texte situé actuellement entre les positions index1 et index2. Si le deuxième argument est omis, la méthode retourne le caractère situé juste après la position index1. Les images ou fenêtres embarquées sont ignorées. Si l’intervalle contient plusieurs lignes, elles sont séparées par des caractères spéciaux '\n'.
    Et la documentation explique ce que sont ces index dans tout un chapitre qui commence par:

    Les index

    Un index est une chaîne de caractère qui sert à préciser une position dans le contenu d’un widget Text. Cette chaîne de caractères est de la forme:
    'ligne.colonne'
    La position située juste avant la colonne indiquée (en comptant à partir de 0) sur la ligne donnée (en comptant à partir de 1). Par exemples: '1.0' est la position de démarrage du texte; '2.3' est la position située juste avant le quatrième caractère de la deuxième ligne.
    De fait, écrire text.get(1.0, END) ne va pas marcher...

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/03/2008, 09h46
  2. Réponses: 9
    Dernier message: 13/12/2007, 09h49
  3. Réponses: 1
    Dernier message: 12/05/2007, 07h14
  4. Formulaire avec liste et zone de texte : pb de sélection
    Par oceanediana dans le forum Access
    Réponses: 6
    Dernier message: 19/07/2006, 14h49
  5. Problème avec les zones de text
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 8
    Dernier message: 10/12/2005, 21h46

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