Bonjour,
J'essaie de réaliser une interface graphique avec TKinter. Cette interface devant afficher un certain nombre d'infos sur un petit écran, j'ai choisi d'organiser tout ça sous forme d'onglets ce qui ne pose pas de problème en soit.
Sauf qu'inévitablement, le programme de cette interface graphique va rapidement grossir et devenir illisible. En conséquence je cherche donc à organiser mon programme en modules.
Un module pour le programme principal de l'UI (main_UI.py) qui se charge de créer la fenêtre et le widget notebook.
Un module par onglet (onglet1_UI.py, onglet2_UI.py et onglet3_UI.py) qui crée les widgets dans l'onglet et contient les fonctions associées.
L'appel des modules fonctionne bien et l'affichage se fait comme il faut.
Le problème : je ne sais pas comment executer les fonctions associées aux widgets.
Exemple, dans l'onglet3 je crée un widget text nommé log et des fonctions nommées clrlog() pour effacer log, tstlogtx() et tstlogrx() pour écrire dans log... sauf qu'elles ne peuvent fonctionner pusqu'elle ne reconnaisse pas log qui est créé dans la fonction datalog()
main_UI.py :
onglet3_UI.py :
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 #! /usr/bin/python3 # -*- coding: utf-8 -*- # importer Tkinter from tkinter import * from tkinter import ttk # importer le contenu des onglets import onglet1_UI import onglet2_UI import onglet3_UI # Creation de la fiche form = Tk() form.title("exemple_TKinter_modules") form.geometry('800x480') # organisation en onglets tabs = ttk.Notebook(form) # Tab1 tab1 = ttk.Frame(tabs) tabs.add(tab1, text=' [Onglet 1] ') # Tab2 tab2 = ttk.Frame(tabs) tabs.add(tab2, text=' [Onglet 2] ') # Tab3 tab3 = ttk.Frame(tabs) tabs.add(tab3, text=' [Onglet 3] ') tabs.pack(expand=1, fill="both") # -------------------------------- WIDGETS ONGLET 1 -------------------------------- onglet1_UI.plan(tab1) # -------------------------------- WIDGETS ONGLET 2 -------------------------------- onglet2_UI.conso(tab2) # -------------------------------- WIDGETS ONGLET 3 -------------------------------- onglet3_UI.datalog(tab3) # On démarre la boucle Tkinter qui s'interompt quand on ferme la fenêtre form.mainloop()
Et si je test ça j'aurais une erreur de type :
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 #! /usr/bin/python3 # -*- coding: utf-8 -*- from tkinter import * def datalog(tabnumber): log = Text(tabnumber, width=30, height=10, bg='black', fg='limegreen') log.pack(side=LEFT, fill='y') # log.pack(anchor='w', fill='y', expand=True) # bouton qui efface le journal btnclrlog = Button(tabnumber, text="Effacer", command=clrlog) btnclrlog.pack(side=LEFT, anchor='n', padx=10, pady=10) # boutons provisoirs destinés à simuler l'émission/reception de données dans le log btntestrx = Button(tabnumber, text="sim_rx", command=tstlogrx) btntestrx.pack(side=LEFT, anchor='n', padx=10, pady=10) btntesttx = Button(tabnumber, text="sim_tx", command=tstlogtx) btntesttx.pack(side=LEFT, anchor='n', padx=10, pady=10) def clrlog(): log.delete('1.0', END) def tstlogrx(): log.insert(END, "Test Reception\n") def tstlogtx(): log.insert(END, "Test Emission\n")
Je ne sais pas vraiment comment procéder pour rectifier ça.NameError: name 'log' is not defined
Quelqu'un pour m'expliquer ?
Merci.
Partager