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 :

Pas de MaJ de l'affichage avec Scrollbar [Python 2.X]


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur CND
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur CND
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Pas de MaJ de l'affichage avec Scrollbar
    Bonjour à tous,

    Tout d'abord, veuillez m'excusez si un sujet similaire existe déjà mais je ne l'ai pas trouvé.

    Voilà mon problème, j'ai défini un Canvas dans lequel je définis une nouvelle frame afin de pouvoir associer des Scrollbars et ainsi m'adapter à la taille de ma fenêtre.
    J'arrive à inclure mes données dans le Canvas, à définir mes scrollbars qui s'adaptent correctement à la taille de la fenêtre. Malheureusement dans le cas où ma fenêtre est plus petite que les données qu'elle contient en largeur, le scrolling horizontale deplace correctement la fenêtre mais n'affiche pas les données "masquées", concrètement j'ai des données tronquées.
    Evidemment, je fais une erreur ou j'oublie quelque chose mais je n'arrive pas à voir quoi alors j'espère que vous pourrez m'aider.

    D'avance merci,

    Voici mon code :

    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    from Tkinter import *
    from ttk import *
    from PIL import Image, ImageTk
     
     
    List_Param_Nom = ['File_Name', 'N_tir', 'Frequency', 'Cycle', 'Mode', 'SumGain', 'Filter', 'T_First', 'R_First', 'ED', 'LD', 'M_Velocity', 
                 'FL_Gain', 'Amplitude', 'P_Width', 'S_Angle', 'Thick_W', 'Angle', 'Width_B', 'Width_R', 'Face_R', 'Radius_B', 'Radius_D', 'N_ActiveElements', 
                 'P_elt_gap', 'P_elt_length', 'P_length', 'P_elt_width', 'W_angle', 'W_height', 'W_velocity', 'Roof_angle', 
                 'P_distance', 'Scan_Offset', 'Index_Offset', 'N_seg', 'Depth_min', 'Depth_max']
     
    List_Param_ref = ['C:/Users/cfaderne/Desktop/loi_retard/J_Bevel/Olympus_J_Bevel', 6, 1000, 1, 1, -1, 0, 1, 1, 1700, 0, 3246, 0, 180, 50, 0, 100, 5, 13.5, 0, 10, 10, 20, 60, 0.08, 0.92,
                      59.92, 10, 33.7, 27.843, 2337, 0, 0, -80000, 0, 3, -90, -40]
     
    List_def = ["Filename (without extension)", "Number of shots per focusing segments", "Probe frequency (dedicated to EMAT)", "Cycle number (dedicated to EMAT)",
    "Inspection mode -> 0 = T/R, 1 = Pulse-Echo", "Gain applied to signal (default value = -1)", "Frequency filter #0 = 0.5 - 20MHz / #1 = 0.5 - 5MHz / #2 = 2 - 10MHz / #3 = 5 - 15MHz",
    "First emitting element", "First receiving element", "Delay due to electronic (1700 for FOCUS and Tomoscan) in ns", "Delay applied on delay laws (Offset ?) in ns",
    "Material velocity in m/s", "Gain per channel in dB (0 - 80)", "Excitation amplitude per channel in V (50 - 200)", "Pulse width in ns (50 - 500)", "Skew angle in tenth of degree",
    "Wall thickness in mm", "Bevel angle in degree", "Bevel Width in mm", "Root Width in mm", "Root Face in mm", "J radius in mm", "Center of the J radius in mm", "Amount of active element per channel", "Interelement gap in mm",
    "Element length in mm", "Active zone length in mm", "Active zone width in mm", "Wedge angle in degree", "Wedge height in mm",
    "Wedge material velocity in m/s", "Roof angle (in case of T/R, otherwise put 0) in degree", "Side to side distance (in case of T/R, otherwise put 0) en mm",
    "Exit point abcissa in microns", "Exit point ordinate in microns", "Number of focusing segments", "Minimal focusing depth, negative value in mm",
    "Maximal focusing depth, negative value in mm"]
     
    dicimg2 = {}
     
    class ScrolledFrame(Frame):
     
        def __init__(self, parent):
            Frame.__init__(self, parent)            
     
            yvscrollbar = Scrollbar(self, orient=VERTICAL)
            yvscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)
            xvscrollbar = Scrollbar(self, orient=HORIZONTAL)
            xvscrollbar.pack(fill=X, side=BOTTOM, expand=FALSE)
            canvas = Canvas(self, bd=0, highlightthickness=0, xscrollcommand=xvscrollbar.set, yscrollcommand=yvscrollbar.set)
            canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)
            yvscrollbar.config(command=canvas.yview)
            xvscrollbar.config(command=canvas.xview)
            canvas.xview_moveto(0)
            canvas.yview_moveto(0)
     
            self.interior = interior = Frame(canvas)
            interior_id = canvas.create_window(0, 0, window=interior, anchor=NW)
     
            def _configure_interior(event):
     
                size = (interior.winfo_reqwidth(), interior.winfo_reqheight())
                canvas.config(scrollregion="0 0 %s %s" % size)
                if interior.winfo_reqwidth() != canvas.winfo_width():
                    canvas.config(width=interior.winfo_reqwidth())
                if interior.winfo_reqheight() != canvas.winfo_reqheight():
                    canvas.config(height=interior.winfo_reqheight())
            interior.bind('<Configure>', _configure_interior)
     
            def _configure_canvas(event):
                if interior.winfo_reqwidth() != canvas.winfo_width():
                    canvas.itemconfigure(interior_id, width=canvas.winfo_width())
                if interior.winfo_reqheight() != canvas.winfo_reqheight():
                    canvas.itemconfigure(interior_id, height=canvas.winfo_reqheight())
            canvas.bind('<Configure>', _configure_canvas)
     
     
    class SampleApp(Tk):
        def __init__(self):
            root = Tk.__init__(self)
     
     
            self.frame = ScrolledFrame(root)
            self.frame.pack()
            self.frame.interior.entries = []
            i = 0
            for values in List_Param_Nom:
                if values == 'File_Name':
                    label = Label(self.frame.interior, text="Delay law file parameters")
                    label.grid(row=i, columnspan=3)
                    i = i+1
     
                elif values == 'Thick_W':
                    label = Label(self.frame.interior, text="Bevel geometry characteristics")
                    label.grid(row=i, columnspan=3)
                    i = i+1
     
                elif values == 'N_ActiveElements':
                    label = Label(self.frame.interior, text="Probe characteristics")
                    label.grid(row=i, columnspan=3)
                    i = i+1
     
                elif values == 'W_angle':
                    label = Label(self.frame.interior, text="Wedge characteristics")
                    label.grid(row=i, columnspan=3)
                    i = i+1
     
                elif values == 'Scan_Offset':
                    label = Label(self.frame.interior, text="Inspection geometry characteristics")
                    label.grid(row=i, columnspan=3)
                    i = i+1
     
                label = Label(self.frame.interior, text=values)
                label.grid(row=i, column=0)
                a = List_Param_Nom.index(values)
                label = Label(self.frame.interior, text=List_def[a])
                label.grid(row=i, column=2)
                entry = Entry(self.frame.interior, width=60)
                entry.grid(row=i, column=1)
                valeurs_def = str(List_Param_ref[a])
                entry.insert(0, valeurs_def)
                self.frame.interior.entries.append(entry)
                i = i+1
     
            self.frame.interior.quit_button = Button(self.frame.interior, text='Quit', command=self.quit)
            self.frame.interior.quit_button.grid(row=i, column=2)
     
     
    app = SampleApp()
    app.mainloop()
    app.destroy()

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 301
    Points : 6 781
    Points
    6 781
    Par défaut
    Salut,

    Ta fonction _configure_canvas(event) redimensionne l'espace de données, ce qui n'est apparemment pas utile et est vraisemblablement la cause du problème.

    En la supprimant, le code fonctionne comme attendu.

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur CND
    Inscrit en
    Septembre 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur CND
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Effectivement avec ta suggestion, j'obtiens bien ce que je souhaite

    Je m'étais inspiré de code existant pour générer ce canevas, et je pensais que cette fonction était nécessaire.

    Encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'affichage avec scrollbar (Sql Developer / Vista)
    Par ZashOne dans le forum Sql Developer
    Réponses: 3
    Dernier message: 08/05/2011, 19h43
  2. aucun affichage avec le cout mais pas d'erreur
    Par skerdreux dans le forum C++
    Réponses: 2
    Dernier message: 15/04/2008, 14h38
  3. [AJAX] simple affichage avec Ajax.Request ne fonctionne pas
    Par karimphp dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/12/2007, 09h35
  4. Pas d'affichage avec un JLayeredPane
    Par Fichman dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 27/08/2007, 20h15
  5. Affichage d'un graphique complet avec scrollbar
    Par MMIC dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 27/01/2005, 16h37

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