Organisation du code d'une interface (tkinter)
Bonjour,
Je rencontre toujours le même problème lorsque je créé une interface,
je n'arrive pas à structurer le code, je ne sais pas trop comment gérer mes callbacks
et j'en arrive rapidement à imbriquer des classes dans tout les sens
Ce que je fais usuellement, c'est créer une classe par widget, tout mes widgets sont ensuite regroupés dans une classe "Interface"
Et je me retrouve à faire des "inheritance" :
Code:
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
| #!/usr/bin/python3
# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.ttk as ttk
class Graphique:
def __init__(self, root):
self.canvas = tk.Canvas(root, width=150, height=100)
self.canvas.pack()
def montrer_texte(self):
self.canvas.create_text(30, 30, text = "mon_texte")
class MontrerTexte:
def __init__(self, root):
btn = tk.Button(root, text="Montrer texte", command=lambda: self.montrer_texte())
btn.pack()
class MainGui(Graphique, ChoisirTexte):
def __init__(self, root):
Graphique.__init__(self, root)
MontrerTexte.__init__(self, root)
root=tk.Tk()
MainGui(root)
root.mainloop() |
ou des classes imbriquées :
Code:
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
| #!/usr/bin/python3
# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.ttk as ttk
class Graphique:
def __init__(self, root):
self.canvas = tk.Canvas(root, width=150, height=100)
self.canvas.pack()
def montrer_texte(self):
self.canvas.create_text(30, 30, text = "mon_texte")
class MontrerTexte:
def __init__(self, outer, root):
btn = tk.Button(root, text="Montrer texte", command=lambda: outer.graph.montrer_texte())
btn.pack()
class MainGui:
def __init__(self, root):
self.graph = Graphique(root)
bouton = MontrerTexte(self, root)
root=tk.Tk()
MainGui(root)
root.mainloop() |
Je trouve ces constructions plutôt bancales,
je ne vois pas trop quelle structure adopter, des conseils?