Bonjour à tous,

J'avance bien sur mon projet grace à votre aide et la je suis sur la première partie de l'interface.

Donc j'ai une fonction qui m'affiche les demandes d'entrée d'information dans l'interface.
Le premier problème c'est que je dois utiliser TAB pour passer d'un champ à l'autre alors que je voudrais utiliser entrée, j'ai lu que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
root.bind_all("<Return>", function)
étaut mon ami mais quand je l'utilise ca ne m'active que la première question.

j"ai également un problème de récupération d'une info de la fonction de saisie essence() vers la fonction d'affichage essenceResult(ess, ent0, ent1, ent2, ent3):
la variable ess_e définie dans essence() est l'heure de début de la procédure et quand j'essaie de l'importer dans la fonction de résultat pour la stocker j'ai une erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
File "D:\Bureautique\Python\Scripts\interface-test.py", line 57, in essenceResult
    ess_e = ent0.get()
AttributeError: 'datetime.datetime' object has no attribute 'get'
J'ai lu que datetime (module) et datetime (fonction) pouvaient être confondus par python et causer des problèmes mais je ne sais pas comment m'en sortir surtout que bien sur je vais vouloir calculer la durée entre ess_e et ess_s qui est elle calculée dans la fonction de saisie quand la procédure est terminée.

------------------------------------------
2° question, je voudrais stocker au fur et à mesure dans un fichier txt les résultats des choses que je rentre pour pouvoir les réexploiter par la suite.

La j'ai une question théorique, est-ce qu'il est mieux et plus facile de sauver un fichier txt par fonction (du genre essence.txt relais .txt et code60.txt) ou alors est-ce que je peux/dois tout mettre dans le meme fichier, ligne par ligne avec un préfixe de ligne qui dirait à quelle fonction s'applique telle ligne du txt et un ; comme séparateur ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
c60;c60[0]; c60[1]
c60;c60[0]; c60[1]
ess;ess[0]; ess[1]; [ess[2]; ess[3]; ess[4]
...
Et ensuite au rechargement des données je lui dis d'afficher toutes les lignes qui commencent par "c60" dans le formulaire c60 et les lignes "ess" dans le formulaire essence....

Une fois cette question théorique réglée je voudrais avoir dans mon interface une grille d'affichage de ces données, je pensais faire une boucle for avec comme limite la quantité de lignes (qui va évoluer) mais je ne sais pas comment mettre ca en forme avec tkinter, si j'ai la place de mettre 5 lignes mais qu'au bout d'une heure j'en ai 10 à afficher est-ce que tkinter va me mettre un ascenseur sur le coté ?

Enfin bref maintenant qu'on a bien avancé dans la logique et le traitement on va avancer dans la disposition et l'UI

Merci d'avance de votre patience et de votre aide.

Voila mon code fouillis "WIP", pour le moment je n'ai travaillé que sur le module essence.

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
from tkinter import *
from datetime import *
import time
ess=[[],[],[],[],[]]
rel=[[],[],[],[],[]]
c60=[[],[]]
def c60duree(delta):
	(h, r) = divmod(delta.seconds, 3600)
	(m, s) = divmod(r, 60)
	return "%s%02d:%02d:%02d" % (
		"%d jour(s) " % delta.days if delta.days > 0 else "",
		h,
		m,
		s,
	)
def code60():
    saisie=0
    while saisie != "X":
        c60d=datetime.now()
        print ("Code 60 activé à ", c60d.strftime("%H:%M:%S"))
        saisie=input("Tapez entree pour la fin du code 60, X pour sortir   : ")
        c60f=datetime.now()
        print("Debut ", c60d.strftime("%H:%M:%S"))
        print("Fin   ", c60f.strftime("%H:%M:%S"))
        c60x=c60f-c60d
        print("Duree ", c60duree(c60x))
        print("-------------")
        c60[0].append(c60d)
        c60[1].append(c60f)
#del(c60[0],[-1])
#del(c60[1],[-1])
#return
 
def relais():
    print("Relais pilote demarré ")
    relh=datetime.now()
    relv=input("Quelle voiture ? ")
    relp=input("Quel pilote repart ? ")
    rele=input("Quantité d'essence ? ")
    input("Tapez entrée à la sortie des stands ")
    rels=datetime.now()
    rel[0].append(relh), rel[1].append(relv), rel[2].append(relp), rel[3].append(rele), rel[4].append(rels)
    print("Dureé ", rels-relh)
    print(*rel)
 
#def essence():
    #ess=[[],[],[],[]]
    #print("Ravitaillement essence demarré ")
    #essh=datetime.now()
    #essv=input("Quelle voiture ? ")
    #essp=input("Quel pilote ? ")
    #essq=input("Combien de litres ? ")
    #ess[0].append(essh), ess[1].append(essv), ess[2].append(essp), ess[3].append(essq)
    #print(*ess)
 
def essenceResult(ess, ent0, ent1, ent2, ent3):
    ess_e = ent0.get()
    essv = ent1.get()
    essp = ent2.get()
    essq = ent3.get()
    ess_s = datetime.now()
    ess[0].append(ess_e), ess[1].append(essv), ess[2].append(essp), ess[3].append(essq), ess [4].append(ess_s)
    resultLabel = Label(Frame4, text = str(*ess))
    resultLabel.grid(row = 5, column = 0, columnspan = 2)
 
def essence():
    print("yr")
    ess_e=datetime.now()
    Frame4.grid(row = 1, column = 0)
    Label1 = Label(Frame4, text = "Ravitaillement demarré ")
    Label1.grid(row = 0, column = 0, columnspan = 2)
    essvLabel = Label(Frame4, text = "Quelle voiture ? ")
    essvEntry = Entry(Frame4)
    essvLabel.grid(row = 1, column = 0)
    essvEntry.grid(row = 1, column = 1)
    essvEntry.focus()
    #root.bind_all("<Return>", function)
    esspLabel = Label(Frame4, text = "Quel pilote part ? ")
    esspEntry = Entry(Frame4)
    esspLabel.grid(row = 2, column = 0)
    esspEntry.grid(row = 2, column = 1)
    esspEntry.focus()
    essqLabel = Label(Frame4, text = "Combien de litres ? ")
    essqEntry = Entry(Frame4)
    essqLabel.grid(row = 3, column = 0)
    essqEntry.grid(row = 3, column = 1)
    essqEntry.focus()
    submitButton = Button(Frame4, text = "Sortie des stands", command = lambda: essenceResult(ess, ess_e, essvEntry, esspEntry, essqEntry))
    submitButton.grid(row = 4, column = 0, columnspan = 2)
fenetre = Tk()
fenetre['bg']='grey'
 
# frame 1
Frame1 = Frame(fenetre, bg="green", borderwidth=1, relief=GROOVE)
Frame1.grid(row = 0, column = 0, padx=5, pady=5)
 
# frame 2
Frame2 = Frame(fenetre, bg="yellow", borderwidth=1, relief=GROOVE)
Frame2.grid(row = 0, column = 1, padx=5, pady=5)
 
# frame 3
Frame3 = Frame(fenetre, bg="purple", borderwidth=1, relief=GROOVE)
Frame3.grid(row = 0, column = 2, padx=5, pady=5)
 
Frame4 = Frame(fenetre)
Fenetre = Tk()
fenetre['bg']='grey'
 
# Ajout de labels
Button(Frame1, text="Essence", command=essence).pack(padx=300, pady=100)
Button(Frame2, text="Relais", command=relais).pack(padx=300, pady=100)
Button(Frame3, text="Code 60", command=code60).pack(padx=300, pady=100)