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
| import tkinter as tk
frame_clicked = None
def on_select(frame):
global frame_clicked
frame_clicked = frame
root.after_idle(root.quit)
def ask_question(text):
frame = tk.Frame(root)
frame._answer = v = tk.IntVar(frame, value=0)
tk.Label(frame, text=text, width=30).grid(row=0, column=0)
cmd = lambda: on_select(frame)
b1 = tk.Radiobutton(frame, text="Yes", variable=v, value='1', command=cmd)
b1.grid(row=1,column=0)
b2 = tk.Radiobutton(frame, text="No", variable=v, value='2', command=cmd)
b2.grid(row=1,column=1)
return frame
if __name__=='__main__':
Q = ['ça va ?','a cause du mauvais temps ?','il fait beau?',
"envie d'en parler ?",'il y a du soleil ?','il y a de la pluie ?']
TREE = (0,
(1,
(4, -1, -1),
(5, -1, -1)
),
(2,
(5, -1, -1),
(3, -1, -1)
)
)
root = tk.Tk()
ix = 0
frames = []
tree = TREE
while 1:
n, left, right = tree # numéro de la question, sous-arbre Yes, sous-arbre No
frame = ask_question(Q[n])
frame._tree = tree # on stocke le sous arbre pour le retour arrière.
frame.grid(row=ix)
frames.append(frame)
root.mainloop()
row = frames.index(frame_clicked)
print('index:', ix, 'row clicked:', row, 'answer:', frame_clicked._answer.get())
if row == ix:
ix += 1
if (left, right) == (-1, -1):
break
else:
row += 1
for w in (reversed(frames[row:])):
w.destroy()
frames.remove(w)
tree = frame_clicked._tree # récupère le s/arbre
_ , left, right = tree # re-définit s/arbre Yes, s/arbre No
ix = row # on remet à jour l'index.
answer = frame_clicked._answer.get() # le s/arbre suivant
tree = right if answer == 1 else left # dépend de la réponse... |
Partager