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 :

fenetre, canvas, frame, scrollbar [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    conducteur autocar
    Inscrit en
    Janvier 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : conducteur autocar
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2020
    Messages : 67
    Points : 34
    Points
    34
    Par défaut fenetre, canvas, frame, scrollbar
    Bonjour a vous,

    débutant sur python, je m'essaye tt d'abord a la manipulation des widgets

    2 petites questions sur le theme de mon post

    la 1° avec bcp de code ms tres facile a lire
    j'ai 1 fenetre principale (avec le mainloop())
    dedans, 1 Canvas ds la partie gauche de la fenetre -------- partie de droite de la fenetre, 1 Frame qui pr le moment ne sert pas et ne contient rien
    ds le Canvas, 1 Frame
    ds le Frame, des Buttons que j'affiche les 1 au dessous des autres

    j'ai rajouté des scrollbar au canvas ms ce dernier ne scroll pas, je ne vois pas mes derniers boutons

    j'ai essayé (rapidement) de jouer avec le scrollregion ms apparemment cela n'a pas d'effet.

    Voici le code (je repete, tres long ms tres facile à lire):
    definit du Canvas, scrollbar et Frame, a partir de la L148

    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
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
     
    #!/usr/bin/python3.9
    # -*- coding: utf-8 -*-
     
     
     
    import tkinter as tk
    from sys import version_info
    import fichier_Fenetre_Lancer_D
    import fichier_Fenetre_Entree
    import fichier_Fenetre_Infos_Elts
    import fichier_Fenetre_Compteur
    import fichier_Fenetre_Actualiser_Lbl_String
    import fichier_Fenetre_Actualiser_Lbl_Intvar
    import fichier_Fenetre_Canvas
    import fichier_Fenetre_hasard
     
    #####################################################################
    ## FP avec des boutons qui ouvrent des  2° Fenetres
    ## ces 2° fenetres st construites a partir de classes
    ## situées ds d'autres fichiers
     
    ## processus
    ## 1]       importer le fichier grace a son nom (ms sans l'extens°)
    ## 2]       definir 1 methode MS apres la creat° de FP
    ## 3]       appeller cette methode au clic sur le Btn
    #####################################################################
    ## les prefixes
    ## FP= Fenetre Principale
    ## F01A= 1° Fenetre secondaire (pr presenter les lancers de Dé)
    ## F01B= 2° fenetre secondaire (pr recupérer la valeur d'1 Entry)
    ## F01C= 3° fenetre secondaire (pr présenter différents widgets)
    ## F01D= 4° fenetre secondaire (pr présenter un simple compteur)
    ## F01E= 5° fenetre secondaire (pr présenter variable de ctrl
        ## de type Stringvar avec attribut text d'1 Lbl)
    ## F01F= 6° fenetre secondaire (pr présenter variable de ctrl
        ## de type IntVar avec attribut text d'1 Lbl)
    ## F01G= 7° fenetre secondaire (pr présenter widget de type Canvas
        ## et widget de type Scrollbar)
    #####################################################################
     
    ## on check la version de python qui execute le programme
    if version_info.major == 2:
        print("ATTENTION: VERSION PYTHON < 3")
    elif version_info.major == 3:
        print("version python >= 3, ok")
    else:
        print("souci autre que votre version de python")
     
    #####################################################################
     
    ## on construit la FP avec des attributs 
    ## (taille par defaut, taille min et taille max)
    ## d'abord la l, puis la h
    FP= tk.Tk()
    FP.geometry("1000x700")
    FP.minsize(410, 200)
    FP.maxsize(1100, 700)
    FP.title("FP - accueil")
     
    #####################################################################
    ## les methodes qui appelent les fichiers et constructeurs extérieurs
     
    ## methode qui appelle la classe de fichier_Fenetre_Lancer_D.py
    ## syntaxe:
    ## nomX= nom_du_fichier.nom_de_la_classe
    def creer_Fenetre_Lancer_Des():
     
        ################################################################
        """
        docstring de fonction: creer_Fenetre_Lancer_Des()
        docstring écrite ds le fichier /home/laurent/Documents/python/test09/FP.py
        ds la méthode creer_Fenetre_Lancer_Des()
        Il y a 1 instruction print() juste au-dessous de la docstring
        print() n'arrete pas l'execut° du code ET s'affiche bien ds la console
        l'instruct° help n'est pas adaptée.
        """
        print(creer_Fenetre_Lancer_Des.__doc__)
        ##help(creer_Fenetre_Lancer_Des.__doc__)
        ################################################################
     
        F01A= fichier_Fenetre_Lancer_D.Fenetre_Lancer_Des(FP,
                                                 "F01A: Lancer de dés",
                                                 600,
                                                 400)
     
    ## methode qui appele la classe de fichier_Fenetre_Entree.py
    ## syntaxe:
    ## nomX= nom_du_fichier.nom_de_la_classe
    def creer_Fenetre_Recuperer_Entree():
        F01B= fichier_Fenetre_Entree.Fenetre_Entree(FP,
                                                    "F01B: Récuperer la valeur d'une entrée",
                                                    600,
                                                    400)
     
    ## methode qui appele la classe de fichier_Fenetre_Infos_Elts.py
    ## syntaxe:
    ## nomX= nom_du_fichier.nom_de_la_classe
    def creer_Fenetre_Infos_Elts():
        F01C= fichier_Fenetre_Infos_Elts.creer_Fenetre_Infos_Elts(FP,
                                                                  "F01C: presenter des infos sur les widgets",
                                                                  600,
                                                                  400)
     
    ## methode qui appelle la classe de fichier_Fenetre_Compteur.py
    ## syntaxe:
    ## nomX= nom_du_fichier.nom_de_la_classe
    def creer_Fenetre_Compteur():
        F01D= fichier_Fenetre_Compteur.Fenetre_Compteur(FP,
                                                              "F01D: afficher un compteur",
                                                              600,
                                                              400)
     
    ## methode qui appelle la classe de fichier_Fenetre_Actualiser_Lbl.py
    ## syntaxe:
    ## nomX= nom_du_fichier.nom_de_la_classe
    def creer_Fenetre_Actualiser_Lbl():
        F01E= fichier_Fenetre_Actualiser_Lbl_String.creer_Fenetre_Actualiser_Lbl_String(FP,
                                                                           "F01E, actualiser 1 lbl grace a 1 variable de ctrl de type StringVar",
                                                                           600,
                                                                           400)
     
    ## méthode qui appelle la classe de fichier_Fenetre_Actualiser_Intvar_String.py
    ## syntaxe:
    ## nomX= nom_du_fichier.nom_de_la_classe
    def creer_Fenetre_Actualiser_Lbl_Intvar():
        F01F= fichier_Fenetre_Actualiser_Lbl_Intvar.creer_Fenetre_Actualiser_Lbl_Intvar(FP,
                                                    "F01F: actualiser 1 lbl grace a 1 variable de ctrl de type Intvar",
                                                    600,
                                                    400)
     
    ## methode qui appelle la classe de fichier_Fenetre_Canvas.py
    def creer_Fenetre_Canvas():
        F01G= fichier_Fenetre_Canvas.creer_Fenetre_Canvas(FP,
                                                          "F01G, 1 F avec Canvas, Lbls et Scrollbar",
                                                          600,
                                                          400)
     
    ## methode qui appelle la classe de fichier_Fenetre_hasard.py
    def creer_Fenetre_hasard():
        F01H= fichier_Fenetre_hasard.creer_Fenetre_hasard(FP,
                                                          "F01H: IntVar ds un Lbl",
                                                          600,
                                                          400)
    #####################################################################
    #####################################################################
     
    ## creat° d'1 widget de type Canvas qui doit supporter
    ## le widget Frame nommé cadre01
    FP_canvas01= tk.Canvas(FP,
                           scrollregion= (0, 0, 1300, 1300),
                           width= 100,
                           height= 300,
                           bd= 5,
                           highlightthickness= 10,
                           highlightbackground= "black",
                           bg= "ivory")
     
    FP_canvas01.grid(column= 0,
                     row= 0,
                     padx= 5,
                     pady= 5)
     
        ##-------------------------------------------------------------
     
    ## créat°, positionnement, configurat° et attribut°
    ## d'1 widget de type Scrollbar
    ## attribué au Canvas, c-a-d, collé au Canvas
     
    ## scrollbar horizontale (en bas du Canvas)
    FP_canvas01_xsb= tk.Scrollbar(FP,
                                  orient= "horizontal")
     
    FP_canvas01_xsb.grid(column= 0,
                         row= 1,
                         sticky= tk.E + tk.W)
     
    FP_canvas01_xsb.config(command= FP_canvas01.xview)
     
    ## on attribue la scrollbar horizontale (celle d'en bas) au Canvas
    FP_canvas01.config(xscrollcommand= FP_canvas01_xsb.set)
     
    ## scrollbar verticale (a droite du Canvas)
    FP_canvas01_ysb= tk.Scrollbar(FP,
                                  orient= "vertical")
     
    FP_canvas01_ysb.grid(column= 1,
                         row= 0,
                         sticky= tk.S + tk.N)
     
    FP_canvas01_ysb.config(command= FP_canvas01.yview)
     
    ## on attribue la scrollbar verticale (celle de droite) au Canvas
    FP_canvas01.config(yscrollcommand= FP_canvas01_ysb.set)
     
        ##-------------------------------------------------------------
     
    ## creation d'1 widget invisible de type Frame
    ## pr disposer les widgets visibles
    FP_cadre01= tk.Frame(FP_canvas01,
                         height= 50,
                         width= 50,
                         padx= 5,
                         pady= 5,
                         bg= "blue",
                         bd= 1)
     
    ## gestionnaire de géométrie attribué au Frame
    FP_cadre01.grid(column= 0,
                    row= 0,
                    padx= 10,
                    pady= 10)
     
        ##----------------------------------------------------------------
     
    ## créat° d'1 2° widget de type Frame
    FP_cadre02=tk.Frame(FP,
                        height= 50,
                        width= 50,
                        padx= 5,
                        pady= 5,
                        bg= "red",
                        bd= 1)
     
    FP_cadre02.grid(column= 2,
                    row= 0,
                    padx= 10,
                    pady= 10)
    #####################################################################
     
    ## disposit° des widgets visibles ds le Frame
     
    ## creation d'un 1° widget (qui appartient a tk()) de type Label
    ## REMARQUE: 1 Label peut contenir du texte et/ou 1 image
    FP_Lbl_01= tk.Label(FP_cadre01,
                        text= "cette fenetre vs permet d'ouvrir différentes fenêtres pr...",
                        padx= 5,
                        pady= 5)
     
    FP_Lbl_01.grid(column= 0,
                   row= 0,
                   padx= 10,
                   pady= 10,
                   ##ipadx= 5,
                   ##ipady= 5,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## créat° d'1 second  widget (le 1° de type Button) (qui appartient a tk())
    FP_Btn_01= tk.Button(FP_cadre01,
                         text= "Simuler des lancers de dés",
                         padx= 5,
                         pady= 5,
                         fg= "red",
                         command= creer_Fenetre_Lancer_Des) ## appel de la methode
                                                            ## creer_Fenetre_Lancer_Des qui elle,
                                                            ## appelle le constructeur
                                                            ## de fichier_Fenetre.py
     
    FP_Btn_01.grid(column= 0,
                   row= 1,
                   padx= 10,
                   pady= 10,
                   ##ipadx= 15,
                   ##ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## créat° d'1 3°  widget (le 2° de type Button) (qui appartient a tk())
    FP_Btn_02= tk.Button(FP_cadre01,
                         text= "Récupérer 1 valeur entrée ds 1 Entry",
                         padx= 5,
                         pady= 5,
                         fg= "blue",
                         command= creer_Fenetre_Recuperer_Entree) ## appel de la methode
     
    FP_Btn_02.grid(column= 0,
                   row= 3,
                   padx= 10,
                   pady= 10,
                   ##ipadx= 15,
                   ##ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## créat° d'1 4° widget (le 3° de type Button) (qui appartient a tk())
    FP_Btn_03= tk.Button(FP_cadre01,
                         text= "récupérer des infos sur les widgets en console",
                         padx= 5,
                         pady= 5,
                         fg= "orange",
                         command= creer_Fenetre_Infos_Elts
                         ## invoque la methode creer_Fenetre_Infos_Elts
                         ## créee + haut ds ce fichier
                         )
     
    FP_Btn_03.grid(column= 0,
                   row= 4,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## créat° d'1 5° widget (le 4° de type Button) (qui appartient a tk())
    FP_Btn_04= tk.Button(FP_cadre01,
                         text= "afficher un compteur",
                         padx= 5,
                         pady= 5,
                         fg= "black",
                         command= creer_Fenetre_Compteur
                         ## invoque la methode creer_Fenetre_Compteur
                         ## définie + haut ds ce fichier
                         )
     
    FP_Btn_04.grid(column= 0,
                   row= 5,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##------------------------------------------------------------
     
    ## créat° d'1 6° widget (le 5° de type Button) (qui appartient a tk())
    FP_Btn_05= tk.Button(FP_cadre01,
                         text= "actualiser 1 lbl (variable de ctrl StringVar) au clic btn",
                         padx= 5,
                         pady= 5,
                         fg= "black",
                         command= creer_Fenetre_Actualiser_Lbl
                         ## invoque la methode creer_Fenetre_Actualiser_Lbl
                         ## définie + haut ds ce fichier
                         )
     
    FP_Btn_05.grid(column= 0,
                   row= 6,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## creéat° d'1 7° widget (le 6° de type Button) (qui appartient a tk())
    FP_Btn_06= tk.Button(FP_cadre01,
                         text= "actualiser 1 lbl (variable de ctrl de type IntVar) au clic btn",
                         padx= 5,
                         pady= 5,
                         fg= "black",
                         command= creer_Fenetre_Actualiser_Lbl_Intvar)
     
    FP_Btn_06.grid(column= 0,
                   row= 7,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## créat° d'1 8° widget (le 7° de type Button)
    FP_btn_07= tk.Button(FP_cadre01,
                         text= "1 widget de type Canvas avec des scrollbar",
                         padx= 5,
                         pady= 5,
                         fg= "black",
                         command= creer_Fenetre_Canvas)
     
    FP_btn_07.grid(column= 0,
                   row= 8,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## creat° d'1 9° widget (le 8° de type Button)
    FP_btn_08= tk.Button(FP_cadre01,
                         text= "utilisat° variable de ctrl de type IntVar",
                         padx= 5,
                         pady= 5,
                         fg= "black",
                         command= creer_Fenetre_hasard)
     
    FP_btn_08.grid(column= 0,
                   row= 9,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## creat° d'1 10° widget (le 9° de type Button)
    FP_btn_09= tk.Button(FP_cadre01,
                         text= "TEST",
                         padx= 5,
                         pady= 5,
                         fg= "black")
     
    FP_btn_09.grid(column= 0,
                   row= 10,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## creat° d'1 11° widget (le 10° de type Button)
    FP_btn_10= tk.Button(FP_cadre01,
                         text= "RETEST",
                         padx= 5,
                         pady= 5,
                         fg= "black")
     
    FP_btn_10.grid(column= 0,
                   row= 11,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## creat° d'1 12° widget (le 11° de type Button)
    FP_btn_11= tk.Button(FP_cadre01,
                         text= "TEST 11",
                         padx= 5,
                         pady= 5,
                         fg= "black")
     
    FP_btn_11.grid(column= 0,
                   row= 12,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## creat° d'1 13° widget (le 12° de type Button)
    FP_btn_12= tk.Button(FP_cadre01,
                         text= "TEST 12",
                         padx= 5,
                         pady= 5,
                         fg= "black")
     
    FP_btn_12.grid(column= 0,
                   row= 13,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## creat° d'1 14° widget (le 13° de type Button)
    FP_btn_13= tk.Button(FP_cadre01,
                         text= "TEST 13",
                         padx= 5,
                         pady= 5,
                         fg= "black")
     
    FP_btn_13.grid(column= 0,
                   row= 14,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
        ##-------------------------------------------------------------
     
    ## creat° d'1 15° widget (le 14° de type Button)
    FP_btn_14= tk.Button(FP_cadre01,
                         text= "TEST 14",
                         padx= 5,
                         pady= 5,
                         fg= "black")
     
    FP_btn_14.grid(column= 0,
                   row= 15,
                   padx= 10,
                   pady= 10,
                   ## ipadx= 15,
                   ## ipady= 15,
                   sticky= tk.W)
     
    #####################################################################
     
    FP.mainloop()
    la seconde question est sur le meme theme.
    apparemment, on ne peut pas mettre de scrollbar a une fenetre,
    quelle est la technique (pas le code, je chercherai) pr y parvenir?

    faut il poser le Canvas puis le Frame ds le Canvas (ce que j'ai fait eu-dessus)?
    faut il poser d'abord le Frame puis le Canvas ds le Frame?
    faut il redimmensionner ces widgets automatiquement par rapport aux dimensions de la fenetre?
    une simple maniere de faire me suffit.

    Voilà,
    En vs remerciant pr votre aide

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Vous devriez séparer vos questions et les illustrer par de petits exemples de ce que vous avez fait.
    Imaginez avoir à recopier 500 lignes de code pour voir ce que çà fait sans les avoir lues un minimum...

    Citation Envoyé par grub_fr Voir le message
    faut il poser le Canvas puis le Frame ds le Canvas (ce que j'ai fait eu-dessus)?
    faut il poser d'abord le Frame puis le Canvas ds le Frame?
    L'empilage de vos widgets définit une structure hiérarchique assez naturelle non?
    Donc si vous voulez afficher un Canvas et des Scrollbar ce sera à l'intérieur de la surface rectangulaire définie par une Frame ou un Toplevel (ou un Label si ça vous chante).
    Reste à savoir où et utiliser proprement grid ou pack... qui par défaut affiche "dans" le widget parent (créé avant)... mais c'est "par défaut".

    Citation Envoyé par grub_fr Voir le message
    faut il redimmensionner ces widgets automatiquement par rapport aux dimensions de la fenetre?
    Est-ce qu'il est physiquement possible de tout afficher à l'écran? ou faut-il utiliser des Scrollbar? Si l'utilisateur demande une plus grande fenêtre faut-il donner l'espace disponible aux widgets qui sont dedans?
    Intuitivement, on va pouvoir faire le Canvas "plus grand" mais on ne va pas agrandir la Scrollbar... donc ça dépend.... et on ne peut pas dire "il faut" mais comprendre/savoir ce qu'on veut et arriver à le coder.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Je lis:
    Citation Envoyé par grub_fr
    ds le Canvas, 1 Frame
    ds le Frame, des Buttons que j'affiche les 1 au dessous des autres
    Cependant une recherche des termes create_window sur ton code ne renvoie rien(je n'ai pas lu ton code, juste recherché si tu avais employé la méthode create_window() à ton canvas).
    Donc ta frame n'est pas écrit dans le canevas mais sur ton canevas... (il te faut utiliser create_window())
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    conducteur autocar
    Inscrit en
    Janvier 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : conducteur autocar
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2020
    Messages : 67
    Points : 34
    Points
    34
    Par défaut
    bonsoir,

    bien, j'ai essayé 2, 3 trucs ms je tourne en rond.
    Je vs réponds

    @Hominidé
    Cependant une recherche des termes create_window sur ton code ne renvoie rien
    normal, je ne l'ai pas utilisée (la méthode) parce que
    1] je ne connais (pas encore) l'objet Canvas, je ne l'ai pas exploré
    2] je ne l'ai pas exploré car je pensais (naïvement) placer mon Canvas et mes scollbar et que tkinter allait faire de la magie

    @Hominidé
    Donc ta frame n'est pas écrit dans le canevas mais sur ton canevas...
    je ne faisais pas la différence entre "sur" et "dans"
    Essayant de comprendre la logique d'1 interface graphique (et ses widgets), j'empilais... betement
    1 fenetre
    au dessus
    1 Frame
    au dessus
    des Button, Label, Entry, etc, etc

    tu me fais prendre conscience de la notion d'imbrication (que je viens de tester)
    voici un bout de code de ma Fenetre Principale (FP), celle qui détient le mainloop()
    ATTENTION
    ici je réponds a Hominidé, on n'est pas du tout ds le sujet du post

    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
     
    ## creat° d'1 widget de type Canvas qui doit supporter
    ## le widget Frame nommé cadre01
    FP_canvas01= tk.Canvas(FP,
                           scrollregion= (0, 0, 1300, 1300),
                           width= 100,
                           height= 300,
                           bd= 5,
                           highlightthickness= 10,
                           highlightbackground= "black",
                           bg= "ivory")
     
    FP_canvas01.grid(column= 0,
                     row= 0,
                     padx= 5,
                     pady= 5)
    dc avec le code ci-dessus, je crée une instance de l'objet Canvas nommée FP_canvas01 et il a 1 parent: "." (c'est a dire FP), me trompe je?
    dc mon objet Canvas (nommée FP_canvas01) est DANS ma fenetre mainloop (nommée FP), me trompe je?

    encore du 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
     
    ## creation d'1 widget invisible de type Frame
    ## pr disposer les widgets visibles
    ## FP_cadre01 est ds FP_canvas01
    FP_cadre01= tk.Frame(FP_canvas01,
                         height= 50,
                         width= 50,
                         padx= 5,
                         pady= 5,
                         bg= "blue",
                         bd= 1)
     
    ## gestionnaire de géométrie attribué au Frame
    FP_cadre01.grid(column= 0,
                    row= 0,
                    padx= 10,
                    pady= 10)
    ici je cree 1 instance de l'objet de type Frame nommé FP_cadre01, il a 2 parents: .!canvas (la fenetre mainloop (FP) et l'objet de type Canvas (FP_canvas01)), me trompe je?
    dc mon objet de type Frame (nommé FP_cadre01) est DANS mon instance de l'objet de type Canvas (nommé FP_canvas01) qui lui est DANS la fenetre mainloop, me trompe je?

    dc,
    a la créat° d'un widget, je décide de quel parent il a.
    ce dt je n'avais pas conscience

    @wiztricks
    Vous devriez séparer vos questions et les illustrer par de petits exemples de ce que vous avez fait.
    Imaginez avoir à recopier 500 lignes de code pour voir ce que çà fait sans les avoir lues un minimum...
    je reconnais que j'ai un peu abusé, a ma décharge c'est qd meme super facile a lire, aéré, et bien (trop? en tt cas c'est ce que vs pensez (d'apres un de vos précédent post) commenté)

    L'empilage de vos widgets définit une structure hiérarchique assez naturelle non?
    Donc si vous voulez afficher un Canvas et des Scrollbar ce sera à l'intérieur de la surface rectangulaire définie par une Frame
    oui je suis d'accord, c'est comme cela que je voyais la chose et pourtant au 1° post j'ai mis le canvas avt le frame
    car j'avais lu (ici ou ailleurs) qu'on ne pvait pas mettre de scrollbar a 1 fenetre ms qu'il fallait les mettre a 1 Canvas
    et là aussi j'esperais la magie tkinter... ... ...
    ms la magie n'a pas opéré, d'ou mon post

    on ne peut pas dire "il faut" mais comprendre/savoir ce qu'on veut et arriver à le coder
    Entierement d'accord encore 1x
    je sais ce que je veux: mettre des scrollbar a une fenetre

    qd je dis "il faut" , je demande une manière de faire, pas du code, juste m'expliquer
    exemple,
    il faut creer 1 fenetre
    il faut placer ds cette fenetre tel elt (ex 1Frame)
    il faut placer ds ce Frame tel elt (ex 1 Canvas)
    il faut placer DANS ou A cote tel elt (ex 1 Scrollbar)

    dc, j'en reviens a ma demande de départ,
    j'ai 1 fenetre avec 1 Frame, ds ce Frame, je vais placer des boutons les 1 en dessous des autres
    les boutons tt en bas seront a un moment donné (qd il y en aura beaucoup) invisibles, inatteignables si je ne peux pas scroller ma fenetre
    dc, pvez vs m'expliquer la maniere de faire pr mettre des scrollbars a 1 fenetre SVP.

    Désolé pour ce post (presque aussi long que mon code) ms j'essaye d'etre le + précis possible pr eviter mésententes et incompréhensions

    En vs remerciant
    grub_fr

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par grub_fr Voir le message
    je sais ce que je veux: mettre des scrollbar a une fenetre
    çà se fait simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sb = Scrollbar(fenetre)
    sb.pack()
    et voilà. Un widget Scrollbar est un widget comme les autres... on l'affiche ou çà fait du sens. Et on le relie au widget qui sera "scrollé".

    Pour le reste, vous voulez faire compliqué sans avoir saisi les principes de construction: il y a des tutos pour çà.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    Je t'invite à étudier la ressource suivante : http://ateliers.mse.free.fr/tkinter/tkinter-ref5.pdf
    Elle répondra à toutes tes questions et bien plus encore. De surcroîts, elle est écrite en français.
    C'est avec elle que j'ai débuté avec tkinter.
    Bien sûr, si tu bloques sur quelque chose, le forum est fait pour cela. (Mais l'apprentissage passe les tutoriels, ils ont été conçus pour cela.)
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    conducteur autocar
    Inscrit en
    Janvier 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : conducteur autocar
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2020
    Messages : 67
    Points : 34
    Points
    34
    Par défaut
    Bonjour,

    voici ce que j'ai fait,

    la fenetre
    dedans, 1 Frame
    dedans, 1 Canvas, 2 scrollbar (vertical et horizontal)
    ds le Canvas, 1 Frame
    ds ce Frame, le btn retour

    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
     
            self.F01A_cadre01= tk.Frame(self.F01A,
                                        width= 1000,
                                        height= 500,
                                        padx= 5,
                                        pady= 5,
                                        bg= "blue",
                                        bd= 1)
     
            self.F01A_cadre01.grid(column= 0,
                              row= 0,
                              padx= 10,
                              pady= 10,
                              ## ipadx= 5,
                              ## ipady= 5,
                              sticky= tk.W)
     
            ##-----------------------------------------------------------------------------
     
            ## creat° d'1 Canvas ds le 1° Frame
            self.F01A_cadre01_cnv01= tk.Canvas(self.F01A_cadre01,
                                          scrollregion= (0, 0, 2000, 2000),
                                          width= 1000,
                                          height= 500,
                                          bd= 1,
                                          highlightbackground= "black",
                                          bg= "ivory")
     
            self.F01A_cadre01_cnv01.grid(column= 0,
                                         row= 0,
                                         padx= 10,
                                         pady= 10,
                                         ## ipadx= 15,
                                         ## ipady= 15,
                                         sticky= "nw")
     
            ##-----------------------------------------------------------------------------
     
            ## creat° scrollbar vertical ds la fenetre self.F01A
            ## dc à côté du 1° Frame
            self.F01A_ysb01= tk.Scrollbar(self.F01A,
                                     orient= "vertical",
                                     command= self.F01A_cadre01_cnv01.yview)
     
            self.F01A_ysb01.grid(column= 1,
                                 row= 0,
                                 sticky= "ns")
     
            ## on configure le Canvas par rapport à la méthode
            ## set de la scrollbar
            self.F01A_cadre01_cnv01.configure(yscrollcommand= self.F01A_ysb01.set)
     
            ##--------------------------------------------------------
     
            ## creat° scrollbar horizontal ds la fenetre self.F01A,
            ## dc à côté du 1° Frame
            self.F01A_xsb01= tk.Scrollbar(self.F01A,
                                     orient= "horizontal",
                                     command= self.F01A_cadre01_cnv01.xview)
     
            self.F01A_xsb01.grid(column= 0,
                                 row= 1,
                                 sticky= "ew")
     
            ## on configure le Canvas par rapport à la méthode
            ## set de la scrollbar
            self.F01A_cadre01_cnv01.configure(xscrollcommand= self.F01A_xsb01.set)
     
            ##--------------------------------------------------------
     
            ## permet d'appairer les scrollbar à la fenetre
            ## et de les placer sur les bords droite et
            ## infèrieur de la fenetre F01A
            self.F01A.grid_rowconfigure(0,
                                        weight= 1)
     
            self.F01A.grid_columnconfigure(0,
                                           weight= 1)
     
            ##--------------------------------------------------------
     
            ## 2° Frame ms cette fois, ds le Canvas
            self.F01A_cadre01_cnv01_cadre01= tk.Frame(self.F01A_cadre01_cnv01,
                                                      width= 100,
                                                      height= 100,
                                                      padx= 0,
                                                      pady= 0,
                                                      bg= "red")
     
            ## méthode create_window() du Canvas qui
            ## contiendra la 2° Frame (1° ds le Canvas)
            self.F01A_cadre01_cnv01.create_window(0,
                                                  0,
                                                  anchor= "nw",
                                                  window= self.F01A_cadre01_cnv01_cadre01)
     
            ##--------------------------------------------------------
     
            ## widget Btn + son positionnement ds la
            ## 1° Frane qui est ds le Canvas
            ## appel de la méthode on_close() au clic btn
            ## bouton retour: ferme et fait apparaitre FP
            self.btn01_retour= tk.Button(self.F01A_cadre01_cnv01_cadre01,
                                         text= "retour",
                                         padx= 5,
                                         pady= 5,
                                         command= self.on_close)
     
            self.btn01_retour.grid(column= 0,
                                   row= 0,
                                   padx= 10,
                                   pady= 10,
                                   ## ipadx= 15,
                                   ## ipady= 15,
                                   sticky= tk.W)
    qu'en pensez-vs?
    le code est il propre?
    la conception vs convient elle?

    n'hesitez pas si vs avez des suggest°.

    Merci
    grub_fr

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut
    Citation Envoyé par grub_fr Voir le message
    qu'en pensez-vs?
    le code est il propre?
    la conception vs convient elle?
    Çà marche ou pas? Et si ça ne vous convient pas toujours impossible d'exécuter le code fourni pour "partager" ce que vous constatez.

    La conception? Ce qui transpire dans votre code est que vous avez mis tout ça à plat dans les attributs d'une classe... Autant utiliser des variables globales!

    Un travail de conception aurait peut être abouti à créer un widget (une classe héritant de Frame) qui réalise un Canvas "scrollable".... et d'éviter la création de noms de variables à rallonge comme "F01A_cadre01_cnv01": la Frame englobante serait alors "self". "self.canvas", "self.hsb",... étant suffisant pour savoir ce qu'elle contient.


    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Bonjour,
    ds le Canvas, 1 Frame
    ds ce Frame, le btn retour
    La façon de procéder est celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    import tkinter as tk
    root = tk.Tk()
    can = tk.Canvas(root, bg='black')
    can.grid()
     
    frame = tk.Frame()
    bt = tk.Button(frame, text="patatipatata", command = lambda: print("hello"))
    bt.grid()
     
    can.create_window(200, 50, window=frame)
    root.mainloop()
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par Hominidé Voir le message
    La façon de procéder est celle-ci
    J'ai l'impression que c'est ce qui a été fait... mais le PO n'a pas l'air de se rendre compte combien son code est difficile à lire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    J'ai l'impression que c'est ce qui a été fait... mais le PO n'a pas l'air de se rendre compte combien son code est difficile à lire.

    - W
    C'est vrai que ces noms à rallonge sont plutôt illisibles...
    Sinon je vois(ou crois voir^^) ligne 83:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.F01A_cadre01_cnv01_cadre01= tk.Frame(self.F01A_cadre01_cnv01,
    Ce que je traduirais par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frame = tk.Frame(canvas,...)
    ...
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    conducteur autocar
    Inscrit en
    Janvier 2020
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : conducteur autocar
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2020
    Messages : 67
    Points : 34
    Points
    34
    Par défaut
    re,

    @wiztricks

    Çà marche ou pas?
    oui, ca fonctionne et cela me convient.
    j'ai compris le concept

    Ce qui transpire dans votre code est que vous avez mis tout ça à plat dans les attributs d'une classe...
    oui, c'est 1 fichier .py qui décrit (cree) une nvelle fenetre avec des elts graphiques (Frame, Canvas, Button)
    ce fichier .py (il y en a 1 par nvelle fenetre) est (st) importé(s) ds le fichier principal qui contient le mainloop()

    Un travail de conception aurait peut être abouti à créer un widget (une classe héritant de Frame) qui réalise un Canvas "scrollable".
    c'est ce a quoi je m'attelle... pr le moment avec 1 classe qui cree 1 bouton retour (qui doit fermer ma fenetre et (r)ouvrir la fenetre parente
    je tenterai la classe heritant de Frame ensuite (et reviendrai vers vs avec un nveau post je pense)

    @Hominidé
    C'est vrai que ces noms à rallonge sont plutôt illisibles...
    c'est vrai ms pr le moment je dois savoir ce que je mets et ou je le mets.
    Je "cherche" 1 nomenclature car nommé les boutons boutons01, 02, 03... au bout d'un moment je pense que cela va me perdre. (si tu as des idées)

    La façon de procéder est celle-ci
    c'est bien ce que je fais... ms avec des noms a rallonge ;-)

    bien, je cloture [RESOLU] ce post.
    En vs remerciant, pr votre lecture et votre aide.

    grub

  13. #13
    Membre expérimenté
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    870
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 870
    Points : 1 522
    Points
    1 522
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par grub_fr Voir le message
    c'est bien ce que je fais... ms avec des noms a rallonge ;-).
    Pas tout à fait :
    ceci est en trop:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ## 2° Frame ms cette fois, ds le Canvas
            self.F01A_cadre01_cnv01_cadre01= tk.Frame(self.F01A_cadre01_cnv01,
                                                      width= 100,
                                                      height= 100,
                                                      padx= 0,
                                                      pady= 0,
                                                      bg= "red")
    Ce qui à la première lecture m'a laissé penser que tu n'avais pas saisis le fonctionnement de la méthode.
    #Rien de nouveau sous le soleil, tout est vanité comme courir après le vent!
    Developpement pour Android avec Python3/Kivy/Buildozer

  14. #14
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par grub_fr Voir le message
    Je "cherche" 1 nomenclature car nommé les boutons boutons01, 02, 03... au bout d'un moment je pense que cela va me perdre.
    C'est pas une question de nomenclature! Lorsqu'on part à écrire machin01, 02, 03,... on crée une liste machins contenant la séquence d'objets correspondants. Et quelque part, c'est juste reformuler un besoin en code.

    Citation Envoyé par grub_fr Voir le message
    c'est ce a quoi je m'attelle... pr le moment avec 1 classe qui cree 1 bouton retour (qui doit fermer ma fenetre et (r)ouvrir la fenetre parente
    je tenterai la classe heritant de Frame ensuite (et reviendrai vers vs avec un nveau post je pense)
    Si vous voulez construire ce genre de relations entre 2 fenêtres, tout ce qui concerne Canvas et Frame est superflu: pour la faire fonctionner, un Button devrait suffire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Probleme de canvas et scrollbar
    Par naoma dans le forum Tkinter
    Réponses: 1
    Dernier message: 26/11/2006, 05h31
  2. Modification titre fenetre contenant frame
    Par raphael dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/06/2006, 09h11
  3. [Tableaux] pseudo frame / scrollbar
    Par highman dans le forum Langage
    Réponses: 1
    Dernier message: 05/04/2006, 22h09
  4. Pb lien entre fenetre de frame
    Par jeje_du_70 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/01/2006, 21h20
  5. (win32) Fenetre fille avec scrollbar
    Par xeland dans le forum Windows
    Réponses: 4
    Dernier message: 11/11/2005, 10h05

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