Deux fenêtres Python — Les-mathematiques.net The most powerful custom community solution in the world

Deux fenêtres Python

Modifié (16 Sep) dans Informatique théorique
Bonjour,
j'ai fait un script qui demande deux informations à un utilisateur et fait ensuite un traitement quelconque. Pour demander les informations (disons le jour de la semaine et Mr ou Mme), je n'utilise pas un input mais une fenêtre Tkinter (pour m'entraîner, je saurais faire avec un input). J'y arrive (je mets le code à la suite), mais j'ai l'impression de faire quelque chose de très moche :
- une première fenêtre demande le jour et renvoie vers une fonction
- cette fonction détruit la première fenêtre et en affiche une seconde en demandant la civilité et renvoie vers ma fonction de traitement.
Comme il n'y a qu'un seul choix possible pour chaque information, RadioButton me paraissait pratique. Mais comme je ne peux pas en mettre deux distincts sur une seule fenêtre (?), j'ai deux fenêtres ce qui me paraît peu pratique et surtout ça complique le code pour pas grand chose. Quel est le moyen intelligent (pas input ;) pour demander deux informations (sans lien entre elles) avec un choix unique à chaque fois ?
from tkinter import *

#variables globales :
fen1 = Tk()
fen2 = Tk()
jour = StringVar()
jour.set('Lu')
civilite = StringVar()
civilite.set('Mr')

def go():
   print(jour.get(), civilite.get())
   fen2.destroy()

def affiche():
   fen1.destroy()
   fen2.geometry('600x300')
   r1 = Radiobutton(fen2, text='Mr', variable=civilite, value='Mr', command=go)
   r1.place(x = 20, y = 50)
   r2 = Radiobutton(fen2, text='Mme', variable=civilite, value='Mme', command=go)
   r2.place(x = 20, y = 100)
   fen2.mainloop()
   fen1.geometry('600x600')
   jours = ['Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa', 'Di']
   for i in range(7):
      r = Radiobutton(fen1, text=jours[i], variable=jour, value=jours[i], command=affiche)
      r.place(x = 20, y = 50 + 100*i)
   fen1.mainloop()

(Désolé pour l'absence de balise pour le code, je ne l'ai pas trouvé)

[Le lien "code" dans le menu (6ème bouton).
J'ai tenté de reconstruire l'indentation. À vérifier ! AD]

Réponses

  • La balise "code" est sous l'onglet "paragraphe".
    (Je me sens un peu comme le Corse qui indique l'emplacement des toilettes à Jack Palmer.)
  • Modifié (16 Sep)
    Je ne sais pas pourquoi j'ai pensé qu'on ne pouvait pas mettre deux RadioButton sur la même fenêtre, ça marche très bien. Si quelqu'un a une meilleur idée pour faire cela (je ne parle pas du fait que je ne suis pas cassé la tête pour placer chaque objet, donc que c'est globalement moche), je serais ravi de le lire.
    def go():
    print(jour.get(), civilite.get())
    fen.destroy()

    fen = Tk()
    jour = StringVar()
    jour.set('Lu')
    civilite = StringVar()
    civilite.set('Mr')
    fen.geometry('1200x600')
    f1=Frame(fen)
    f1.pack()
    jours = ['Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa', 'Di']
    for i in range(7):
    r = Radiobutton(fen, text=jours[i], variable=jour, value=jours[i])
    r.place(x = 20, y = 50 + 100*i)
    f2=Frame(fen)
    f2.pack()
    r1 = Radiobutton(fen, text='Mr', variable=civilite, value='Mr')
    r1.place(x = 1000, y = 50)
    r2 = Radiobutton(fen, text='Mme', variable=civilite, value='Mme')
    r2.place(x = 1000, y = 100)
    B = Button(fen, text = 'OK', command = go)
    B.place(x = 600, y = 500)
    fen.mainloop()
  • Perso, j'aurai fait quelque chose du style. 

    C'est fonctionnel donc c'est le principal. 

    Pour l'esthétique, c'est plus tard ! Déja bien maitriser ce que tu fais. 
    Linux n'a pas de racines IP
  • Si, tu peux avoir plusieurs boutons radio indépendants dans la même fenêtre.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
Connectez-vous ou Inscrivez-vous pour répondre.
Success message!