Salut j'ai du faire un programme qu'on appelera base qui en importe un autre appelé choix3
Au début du programme base je dois choisir un groupe de personne et si je choisis le troisième il importe le programme choix3 et l'exécute. Quand il a finit d'exécuter le programme choix3, il repart sur le programme base et de la je re choisis un groupe de personnes. Cependant, quand je re sélectionne le groupe 3, il ne relance pas le programme choix3 et me redemande de choisir un groupe en boucle... Quelqu'un sait pourquoi ? Merci
Voici le code du programme de base
-*- coding: utf-8 -*-
r=0
while(r==0):
import os
from Tkinter import *
Mafenetre = Tk()
def groupe1_1():
Mafenetre.destroy()
choix1
def groupe1_2():
Mafenetre.destroy()
import choix2
def groupe2_1():
Mafenetre.destroy()
import choix3
def groupe2_2():
Mafenetre.destroy()
import choix4
Label1 = Label(Mafenetre, text = 'Veuillez choisir un groupe.',bg='white', fg = 'black')
Mafenetre.title('Choix du groupe')
Mafenetre.geometry("200x80+800-500")
Mafenetre.configure(bg = "white")
Label1.pack()
Bouton1 = Button(Mafenetre, text = 'Groupe 1.1',command = groupe1_1)
Bouton1.pack()
Bouton1.place(x=0,y=20)
Bouton2 = Button(Mafenetre,text = 'Groupe 1.2',command = groupe1_2)
Bouton2.pack()
Bouton2.place(x=100,y=20)
Bouton3 = Button(Mafenetre, text = 'Groupe 2.1', command = groupe2_1)
Bouton3.pack()
Bouton3.place(x=0,y=50)
Bouton4 = Button(Mafenetre, text = 'Groupe 2.2',command = groupe2_1)
Bouton4.pack()
Bouton4.place(x=100,y=50)
Mafenetre.mainloop()
Et le code du second programme très basique que je viens de créer mais qui ne change rien au problème
x=0
while(x!=1):
print'Y=',x
x=x+0.5
Je lance le programme de base, je choisis groupr 2.1, le sous programme se lance, j'obtiens x=0, x=0.5 puis si je sélectionne groupe 2.1, le sous programme ne se reaffiche pas
PS: Les tab ne s'affichent pas
Le 10 décembre 2016 à 21:01:01 ViveLaRdk a écrit :
PS: Les tab ne s'affichent pas
Il faut que tu utilises la balise < code> code() < /code>.
http://pastebin.com/eRDMq95m
Je pense que ce sera mieux
Ps ne faites pas attention à l'oublie import devant choix1
Je crois que le problème vient du fait que pour ne pas importer des choses en double, python met mon second programme à la valeur none et du coup ça fait rien quand je le remporte
Le 10 décembre 2016 à 22:17:22 ViveLaRdk a écrit :
Je crois que le problème vient du fait que pour ne pas importer des choses en double, python met mon second programme à la valeur none et du coup ça fait rien quand je le remporte
L'idée est à peu près là, en effet : http://stackoverflow.com/questions/19077381/what-happens-when-i-import-module-twice-in-python
En gros vu que tu as déjà importé ton module, Python ne va pas le ré-importer, donc la fonction qui était dans choix3 ne sera pas exécutée une nouvelle fois.
Le truc, c'est que tu devrais éviter de mettre des instructions dans la partie racine de choix3, car comme tu l'as compris, celle-ci seront exécutées au moment de l'importation, et c'est rarement un comportement désirable.
Au lieu de ça, tu devrais plutôt mettre le code à exécuter dans une fonction. Ensuite, tu importeras spécifiquement cette fonction tout en haut de ton programme, et lors du choix, tu exécuteras cette fonction importée.
Ainsi, ton module choix3.py ressemblera à ça :
def do_something_3():
print("Something is done.")Et dans ton programme, tu feras:
from choix3 import do_something_3
...
def groupe2_1():
Mafenetre.destroy()
do_something_3()
Aussi, un principe important de la programmation est nommé "DRY" : "Don't Repeat Yourself".
Quand on regarde ton code, on voit que beaucoup de lignes sont identiques, avec seulement quelques paramètres qui changent. Tu peux donc envisager de faire une fonction qui regroupera ce code à un seul endroit, et tu appelleras par la suite cette fonction au lieu de copier/coller chaque partie (ce qui présente des gros désavantages comme un risque multiplié de faire des erreurs, un code moins lisible, devoir changer chaque ligne si tu veux apporter une modification).
Ton code pourrait ainsi ressembler à ça :
# -*- coding: utf-8 -*-
import os
import Tkinter as tk
from choix1 import do_something_1
from choix2 import do_something_2
from choix3 import do_something_3
from choix4 import do_something_4
def make_buttons(window):
functions = {
(1, 1): do_something_1,
(1, 2): do_something_2,
(2, 1): do_something_3,
(2, 2): do_something_4
}
places = {
(1, 1): (0, 20),
(1, 2): (100, 20),
(2, 1): (0, 50),
(2, 2): (100, 50)
}
for first in range(1, 3):
for second in range(1, 3):
text = "Groupe {}.{}".format(first, second)
function = functions[(first, second)]
x, y = places[(first, second)]
def command():
window.destroy()
function()
button = tk.Button(fenetre, text=text, command=command)
button.place(x=x, y=y)
button.pack()
my_window = tk.Tk()
my_window.title("Choix du groupe")
my_window.geometry("200x80+800-500")
my_window.configure(bg="white")
label_text = "Veuillez choisir un groupe."
label_1 = tk.Label(my_window, text=label, bg='white', fg='black')
label_1.pack()
make_buttons(my_window)Tu ne pourras probablement pas tout assimiler du premier coup, mais essaye d'y jeter un oeil au fur et à mesure de tes progrès.
Quelques modifications que j'ai apporté :
import doivent presque toujours se faire tout en haut de ton programme Python.* est considéré comme mauvais,, mais pas d'espace autour des ==while True:mainloop() est déjà en soit une boucle infinieJe crois que tu utilises Python 2 ? Essaye plutôt d'installer Python 3, ça t'évitera d'apprendre des choses obsolètes et mal pensées.
Merci beaucoup pour ta réponse, tu as du en passer du temps à tout écrire. Je vais essayer de suivre tes conseils par rapport aux fonctions et oui j'utilise python 2.7 mais je n'ai pas le choix j'utilise un capteur d'empreintes sur rasberry qui a été codé pour python 2 et le code qui sert à initialiser le capteur, à rendre lisible une empreinte et toutes les autres fonctions ont déjà été codé en python 2 et il ne fonctionne pas quand j'utilise python 3 ![]()
Le 11 décembre 2016 à 00:13:21 ViveLaRdk a écrit :
Merci beaucoup pour ta réponse, tu as du en passer du temps à tout écrire. Je vais essayer de suivre tes conseils par rapport aux fonctions et oui j'utilise python 2.7 mais je n'ai pas le choix j'utilise un capteur d'empreintes sur rasberry qui a été codé pour python 2 et le code qui sert à initialiser le capteur, à rendre lisible une empreinte et toutes les autres fonctions ont déjà été codé en python 2 et il ne fonctionne pas quand j'utilise python 3
Ah oui effectivement, les bibliothèques compatibles uniquement 2.7 sont un des rares cas où l'on ne peut pas faire autrement que de programmer avec une ancienne version de Python.
Retiens pas tout ce que je t'ai dit mais essaye effectivement de penser "en fonctions", pour décomposer plus facilement ton code, ça te facilitera la vie.
Bon courage pour ton projet. ![]()
Merci beaucoup pour ton aide ![]()
J'ai une autre question
Comment empêcher le redimensionemment d'un bouton de tkinter ?
Je leur mets une taille spécifique mais ils se remettent plus grand à chaque fois ![]()
En plus je ne peux pas faire
Bouton.resizable(width=False,height=False) ça ne marche que sur la fenêtre