IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

App Tkinter MVP avec layout Excel


Sujet :

Tkinter Python

  1. #1
    Invité de passage
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2026
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2026
    Messages : 2
    Par défaut App Tkinter MVP avec layout Excel
    Bonjour,

    J'aimerais vous faire part de mon expérience de développement d'un application Python Tkinter suivant le pattern MVP et avec un fichier Excel pour le layout:

    La View et le Controller (Un Presenter en réalité) partagent le concept de "widget zone" (WidgetZones), une zone fonctionnelle représentant soit un widget isolé soit un groupe de widgets permettant de remplir une fonction, et à laquelle est adjointe une liste d'événements génériques devant être traités par le Controller.
    Il appartient à la View d'utiliser la bibliothèque graphique de son choix et de choisir les widgets réels correspondant à ces widget zones.
    Des événements génériques (WidgetEvents) leur sont associés, par exemple LEFT_CLICK, FOCUS_OUT, ... ainsi que l'événement ACTIVATE créé afin de pouvoir exprimer un choix métier via l'interface de l'app, tout en laissant une liberté maximale à la View pour son implémentation:

    Par exemple:
    - Widget zone "SELECT_FILES", événement générique ACTIVATE, sera par exemple traduit par la View comme un tk.Button (avec command), permettant au Controller d'ouvrir une boîte de dialogue de sélection de fichiers

    - Widget zone "DOC_TYPES", événment générique ACTIVATE, sera par exemple traduit par la View commme
    * un tk.LabelFrame entourant des tk.Radiobutton (avec command) à choix exclusif
    * ou un tk.Label associé à une ttk.Combobox (avec <<ComboboxSelected>>) à choix unique
    pour sélectionner un type de document (les différents types étant repris dans une Enum), ce choix étént enregistré par le Controller

    - Widget zone "SUFFIX", événement générique FOCUS_OUT, sera par exemple traduit par la View comme un tk.Entry (avec <FocusOut>), le Controller enregistrant la valeur du suffixe à ce moment

    - Widget zone "SELECT_FILES_INFO", sans événement, sera par exemple traduit par la View comme un tk.label, pour que le Controller y place le nombre de fichiers sélectionnés

    L'association tk.labelFrame/tk.Radiobuttons ou tk.Label/ttk.Combobox permet une sélection avec choix exclusif; pour une sélection à choix multiple, on pourrait imaginer une série de widget zones indépendantes, traduites par la View comme de multiples tk.Checkbuttons indépendants

    Les widget zones en widgets sont décrites par la View dans une structure WidgetZoneInfo associée à chaque widet zone et contenant le widget lui-même, le type (tk.Button, tk.Label, ...), la variable tk éventuellement utilisée, des infos sur le Style, le layout, ainsi qu'une liste éventuelle des widgets "enfants" en cas de sélection à choix exclusif (tk.Radiobuttons associés à une widget zone représentée par un tk.LabelFrame, ou une ttk.Combobox associée à une widget zone représentée par un tk.label)

    Les éventuels widget "enfants" sont décrits chacun dans une structure ChildWidgetInfo et contenant le widget lui-même, le type (tk.Radiobutton, tk.Combobox), des infos sur le Style, le layout, ...

    Les layouts utilisés dans WidgetZoneInfo et ChildWidgetInfo sont extraits automatiquement par l'application au départ d'un fichier Excel permettant d'y dessiner les widgets sur base de leurs dimensions en pourcentages relatifs de la largeur et de la hauteur de la fenêtre de l'application et d'inscrire le nom de la widget zone, ainsi que le type !
    Ainsi donc, adieu les grid, pack, pad, pady, sticky, ... souvent très perturbants

    Ces structures sont parcourues par l'app et permettent d'adresser au Controller un callback unique avec comme uniques paramètres la widget zone, l'événement générique demandé et l'éventuelle valeur associée. Le Controller effectue ensuite les opérations métier nécessaires (Thread-safe) avec infos sur l'état d'avancement et demande à la View d'afficher les résultats.

    Qu'en pensez-vous ?

    Merci

  2. #2
    Invité de passage
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2026
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2026
    Messages : 2
    Par défaut
    Nom : 2026-09-09 20_30_44-widgets_layout.xlsx - Excel.png
Affichages : 22
Taille : 36,3 Ko

    Nom : 2026-09-09 20_31_13-PDF DOMRE _ NEMO.png
Affichages : 19
Taille : 28,1 Ko

Discussions similaires

  1. Problème avec open() [Excel VBA]
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 16h21
  2. Es-ce possible de créer une table MySQL avec MS Excel
    Par pierrot10 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/10/2005, 06h30
  3. [MFC] Automation : pb avec #include "excel.h"
    Par Nath71 dans le forum MFC
    Réponses: 2
    Dernier message: 19/09/2005, 09h40
  4. petit probleme avec automation Excel
    Par Tempotpo dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 05/08/2005, 08h57
  5. App Socket Raw avec VC++6
    Par Martin Soucy dans le forum Développement
    Réponses: 3
    Dernier message: 04/12/2002, 05h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo