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 :

Combobox uniquement avec Tkinter


Sujet :

Tkinter Python

  1. #121
    Futur Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 70
    Points : 8
    Points
    8
    Par défaut
    Ce sera plus parlant avec cet exemple
    Il aurait fallu que la scroll se remette à sa place initiale lors de la réapparition


    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
    #!/usr/bin/env python
    # -*- coding:UTF-8 -*-
    #-------------------------------------------------------------------------------
    # Name:        module1
    # Purpose:
    #
    # Author:      AlienWare
    #
    # Created:     13/05/2012
    # Copyright:   (c) AlienWare 2012
    # Licence:     <your licence>
    #-------------------------------------------------------------------------------
     
    import sys
    runPython3 = sys.version_info.major > 2
    if runPython3:
        import tkinter as tk
    else:
        import Tkinter as tk
    from sys import platform
    from MyScrollBar import *
     
    class AutoScrollbar(tk.Scrollbar):
        """Scrollbar se masquant automatiquement si inutile."""
        def __init__(self, parent = None, **kw):
            tk.Scrollbar.__init__(self, parent, **kw)
            self.__parent = parent
        #    self.bind('<Map>', 
     
        #def __widgets_orders(self, event):
     
     
        def set(self, lo, hi):
            if float(lo) <= 0.0 and float(hi) >= 1.0:
                self.tk.call(self.__manage, 'forget', self._w)
            else:
                if self.__manage in ('pack', 'place'):
                    self.tk.call((self.__manage, 'after', self.__widgetsOrders[-1]))
                    self.tk.call((self.__manage, 'configure', self._w) + self.__geometry)
                    print(self.__widgetsOrders[-1])
                    self.nametowidget(self.__widgetsOrders[-1]).insert('end', 'rien')
                else:
                    self.tk.call((self.__manage, 'configure', self._w) + self.__geometry)
            tk.Scrollbar.set(self, lo, hi)
     
        def __widget_manage(self, manage = None, cnf = {}, **kw):
            self.__manage = manage
            self.__geometry = self._options(cnf, kw)
            self.__widgetsOrders = self.__parent.tk.call(manage, 'slaves', self.__parent).split(' ')
            print(self.__widgetsOrders)
            self.tk.call((self.__manage, 'configure', self._w) + 
                            self._options(cnf, kw))
     
        def grid(self, cnf = {}, **kw):
            self.__widget_manage('grid', cnf, **kw)
     
        def pack(self, cnf = {}, **kw):
            self.__widget_manage('pack', cnf, **kw)
     
        def place(self, cnf = {}, **kw):
            self.__widget_manage('place', cnf, **kw)
     
    def main():
     
        def vide_list():
            lbx.delete(0, tk.END)
     
        def rempli_list():
            for i in range(100):
                lbx.insert(tk.END, i)
     
        root = tk.Tk()
        frm = tk.Frame(root)
        frm.grid(row = 0, column = 0)
        lbx = tk.Listbox(frm)
        lbx.insert('end', 1)
        lbx.insert('end', lbx)
     
        lbx2 = tk.Listbox(frm)
        lbx2.insert('end', 2)
        lbx2.insert('end', lbx2)
        lbx3 = tk.Listbox(frm)
        lbx3.insert('end', 3)
        lbx3.insert('end', lbx3)
        yscroll = AutoScrollbar(frm, command = lbx.yview)
        lbx['yscrollcommand'] = yscroll.set
        lbx.pack(side = tk.LEFT, expand = tk.YES, fill = tk.BOTH)
        yscroll.pack(side = tk.LEFT, expand = tk.YES, fill = tk.Y)
        lbx2.pack(side = tk.LEFT, expand = tk.YES, fill = tk.BOTH)
        lbx3.pack(side = tk.RIGHT, expand = tk.YES, fill = tk.BOTH)
        frm1 = tk.Frame(root)
        frm1.grid(row = 0, column = 1, sticky = tk.N)
        tk.Button(frm1, text = 'vide', command = vide_list, width = 10).grid(row = 0, column = 0, sticky = tk.NW)
        tk.Button(frm1, text = 'rempli', command = rempli_list, width = 10).grid(row = 1, column = 0, sticky = tk.NW)
        rempli_list()
     
        root.mainloop()
     
    if __name__ == '__main__':
        main()

  2. #122
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    C'est bien de cela doit je parle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Le gros problème c'est que vous aurez les informations (widget.pack_info() etc...) mais comment retrouver l'ordre de positionnement pour un même niveau de widget ?
    L'ordre doit être le même.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.__parent.tk.call(self.__manage, 'slaves', self.__parent)
    Vous donne une liste ou votre widget a un index et lorsque vous faite un forget vous devez garder de coté les widgets de cette liste qui se trouve après le votre (index), ainsi que leurs informations (cnf, kw).
    Lors du configure vous devez faire un forget de ceux ci, faire le configure de votre Scrollbar, puis refaire les autres widgets pour garder la même géométrie.
    Je me demande même s'il n'est pas utile de refaire tout le niveau de widget.

    A vous de tester (Il est si simple le grid_remove)

    @+
    Merci d'utiliser le forum pour les questions techniques.

  3. #123
    Futur Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 70
    Points : 8
    Points
    8
    Par défaut
    Pour en revenir à la combobox, la scrollbar initiale est suffisante.

    C'était plus dans le défi de rendre la scrollbar utilisable sur tout type de management.

    Quoiqu'il en soit rien n'empêche de créer une classe
    AutoScrollbar (tk.Frame):

    et là plus de problème de manage vu que la frame ne sera pas remove ou forget mais uniquement la scrollbar qu'elle contient.

  4. #124
    Futur Membre du Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2012
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2012
    Messages : 70
    Points : 8
    Points
    8
    Par défaut
    Par contre concernant la buttoncanvas, après test, j'ai l'impression que l'affichage a l'initialisation est plus long avec le canvas plutôt qu'avec un label ou button traditionnelle

Discussions similaires

  1. ComboBox avec Tkinter
    Par Spitfire 95 dans le forum Tkinter
    Réponses: 3
    Dernier message: 14/02/2010, 12h45
  2. Réponses: 6
    Dernier message: 09/03/2006, 13h35
  3. [Tkinter] Plusieurs fenêtre avec Tkinter
    Par cyrpaut dans le forum Tkinter
    Réponses: 2
    Dernier message: 04/01/2006, 22h24
  4. [Tkinter] Un petit souçis d'event avec Tkinter
    Par fire.stone dans le forum Tkinter
    Réponses: 4
    Dernier message: 29/10/2005, 20h56

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