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 :
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()
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
#! /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")
Et si je test ça j'aurais une erreur de type :
NameError: name 'log' is not defined
Je ne sais pas vraiment comment procéder pour rectifier ça.
Quelqu'un pour m'expliquer ?

Merci.