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

Python Discussion :

Gestion des dimensions des frames avec widget


Sujet :

Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 4
    Par défaut Gestion des dimensions des frames avec widget
    Bonjour à tous,

    Je travaille actuellement sur un code python pour traiter des données. Je cherche à organiser ma fenêtre avec des frames. Dans ces frames je souhaite utiliser des widgets.

    Problème : Sans les widgets, mes frames ont bien les proportions attendues : data_frame = 1/3 à gauche et tabs_frame = 2/3 à droite.

    Mais quand j'ajoute un widget dans mes frames metadata_frame et statistics_frame (contenues dans data_frame), les proportions de data_frame et tabs_frame ne fonctionne plus.

    Mon code est le suivant (juste une partie, mais qui suffit pour discuter du problème) : dès que je décommente les lignes mettant en grille mes deux widgets ca casse mes proportions

    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    import tkinter as tk
    from tkinter import ttk
    from tkinterdnd2 import TkinterDnD, DND_FILES
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
    from scipy.interpolate import griddata
     
    class DatFileApp(TkinterDnD.Tk):
        def __init__(self):
            super().__init__()
            self.title("Analyse de fichiers .dat")
            self.state('zoomed')  # Maximiser la fenêtre au lancement
     
            # Créer les zones
            self.frame()
            self.file_path = None  # Initialiser le chemin du fichier
     
     
        def frame(self):
     
            # Créer la frame principale (main) qui occupe le reste de l'écran
            self.main_frame = tk.Frame(self)
            self.main_frame.grid(row=1, column=0, sticky="nsew", padx=20, pady=20)
            self.grid_columnconfigure(0, weight=1)  # La colonne 0 prend tout l'espace horizontal disponible
     
            # Configurer les colonnes dans la frame principale
            self.main_frame.grid_columnconfigure(0, weight=1)
            self.main_frame.grid_columnconfigure(1, weight=2)
     
            # Créer les frames à l'intérieur de la frame main en utilisant LabelFrame
            self.data_frame = tk.Frame(self.main_frame)
            self.data_frame.grid(row=0, column=0, sticky="nsew", padx=(0, 10))  # Ajouter un espace à droite
     
            self.graph_frame = tk.LabelFrame(self.main_frame, text="Graphiques", labelanchor="n", padx=10, borderwidth=2, relief="solid")
            self.graph_frame.grid(row=0, column=1, sticky="nsew")
     
            # Configurer les lignes et colonnes pour s'étendre dans main_frame
            self.main_frame.grid_rowconfigure(0, weight=1)
            self.main_frame.grid_columnconfigure(0, weight=1)
            self.main_frame.grid_columnconfigure(1, weight=2)
     
     
            # Zone pour les onglets des graphiques
            self.tabs_frame = tk.LabelFrame(self.main_frame)
            self.tabs_frame.grid(row=0, column=1, padx=10, pady=20, sticky="nsew")
     
            # Ajustements pour data_frame
            self.data_frame.grid_rowconfigure(0, weight=1)  # Première ligne de data_frame s'étend
            self.data_frame.grid_rowconfigure(1, weight=1)  # Deuxième ligne de data_frame s'étend
            self.data_frame.grid_columnconfigure(0, weight=1)  # Colonne de data_frame s'étend
     
            # Ajustements pour tabs_frame
            self.tabs_frame.grid_rowconfigure(0, weight=1)  # Onglets s'étendent verticalement
            self.tabs_frame.grid_columnconfigure(0, weight=1)  # Onglets s'étendent horizontalement
     
            # Créer les frames à l'intérieur de la frame data_frame en utilisant LabelFrame
            self.metadata_frame = tk.LabelFrame(self.data_frame, text="Métadonnées", labelanchor="n", padx=10, pady=10, borderwidth=2, relief="solid")
            self.metadata_frame.grid(row=0, column=0, sticky="nsew")
     
            self.statistics_frame = tk.LabelFrame(self.data_frame, text="Statistiques", labelanchor="n", padx=10, pady=10, borderwidth=2, relief="solid")
            self.statistics_frame.grid(row=1, column=0, sticky="nsew")
     
            # Zone pour les métadonnées
            self.metadata_text_widget = tk.Text(self.metadata_frame, wrap='word', height=10)
            ####self.metadata_text_widget.grid(sticky="nsew")
            self.metadata_text_widget.config(state=tk.DISABLED)
     
            # Zone pour le tableau des statistiques
            self.stats_tree = ttk.Treeview(self.statistics_frame, columns=["Stat", "Value"], show="headings")
            self.stats_tree.heading("Stat", text="Statistique")
            self.stats_tree.heading("Value", text="Valeur")
            ####self.stats_tree.grid(sticky="nsew")
     
            # Configurer le redimensionnement dans metadata_frame et statistics_frame
            self.metadata_frame.grid_rowconfigure(0, weight=1)  # Le widget texte occupe tout l'espace vertical
            self.metadata_frame.grid_columnconfigure(0, weight=1)  # Le widget texte occupe tout l'espace horizontal
     
            self.statistics_frame.grid_rowconfigure(0, weight=1)  # Le tableau occupe tout l'espace vertical
            self.statistics_frame.grid_columnconfigure(0, weight=1)  # Le tableau occupe tout l'espace horizontal
     
     
    if __name__ == "__main__":
        app = DatFileApp()
        app.mainloop()
    Merci d'avance pour le temps que vous me consacrerez.

  2. #2
    Candidat au Club
    Femme Profil pro
    hobby
    Inscrit en
    Avril 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : hobby

    Informations forums :
    Inscription : Avril 2024
    Messages : 4
    Par défaut
    Bonjour,

    Dans Tkinter, quand un widget est placé, le conteneur s'ajuste aux contenants.
    Par défaut à True, il faut empêcher ce comportement grâce à la méthode grid_propagate(False)

    Essaye donc d'ajouter self.grid_propagate(False) à tes frames

Discussions similaires

  1. Gestion des transactions avec les composants DOA
    Par lper dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/12/2008, 16h06
  2. [XHTML][CSS] simuler des frames avec des div
    Par piwai dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 09/11/2005, 13h26
  3. Gestion des factures avec interbase
    Par AlexB59 dans le forum Bases de données
    Réponses: 1
    Dernier message: 25/10/2005, 12h05
  4. Gestion des cookies avec Indy 10
    Par membrax dans le forum Web & réseau
    Réponses: 5
    Dernier message: 21/09/2005, 18h44
  5. Class de gestion des images avec rotation
    Par Johnny Boy dans le forum MFC
    Réponses: 1
    Dernier message: 03/05/2005, 11h54

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