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

GUI Python Discussion :

[tix] widget Checklist


Sujet :

GUI Python

  1. #21
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    Parce que je ne connaissais pas... Ça fait exactement je que je cherche. Comme je n'ai pas cette culture, je m'embrouille avec tkraise, lift etc...
    Cool.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  2. #22
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Je me bats toujours avec Tix. Il est dit dans la doc qu'un widget tix hérité de tkinter s'utilise comme un widget tkinter. J'ai supposé que tix.ScrolledText était hérité de tkinter.Text. Ça ne me parait pas vraiment possible. Par exemple la méthode 'insert' de Tkinter.Text a disparu de Tix.ScrolledText ...

    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
     
    import Tix as tix
    import xml.etree.ElementTree as ET
     
    class XML_TREE(tix.Frame):
        def __init__(self, container, xml_doc, *args, **kwds):
            if not 'width' in kwds.keys():kwds['width'] = 320
            if not 'height' in kwds.keys():kwds['height'] = 480
            tix.Frame.__init__(self, container)
            self.tree = tix.Tree(self, *args, **kwds)
            self.obj_frm = None
            self.objects = {}
            self.tree.hlist.config(bg='white', fg='black', selectbackground='black', selectforeground='white')
            self.idx = 0
            self.buildTree(xml_doc.getroot())
            self.tree.autosetmode()
            self.tree['browsecmd'] = lambda dir=None: self.browsecmd(dir)
            self.switch = 0
            self.tree.grid(column=0, row=0)
            self.properties = tix.ScrolledText(self, width=kwds['width']*2, height=kwds['height'])
            self.properties.grid(column=1, row=0)
            toto =  dir(self.properties)
            for item in toto:
                print item
     
        def isInteger(self, text):
            for car in text:
                if not car in ('1234567890'):
                    return False
            return True
     
        def getIdx(self):
            retstr = str(self.idx)
            self.idx += 1
            return retstr
     
        def buildTree(self, element, dir=None, deep=0):
            if dir == None:
                dir = self.getIdx()
            # builds element
            self.tree.hlist.add(dir, itemtype=tix.IMAGETEXT, text=element.tag, image=self.tk.call('tix', 'getimage', 'folder'))
            # builds element's text
            if element.text != None:
                text = element.text.strip()
                if text != '':
                    self.tree.hlist.add(dir + '.' + 'TEXT', itemtype=tix.IMAGETEXT, text="TEXT", image=self.tk.call('tix', 'getimage', 'file'))
            # builds element's attributes
            for key in element.attrib.keys():
                tempdir = dir + '.' + key
                self.tree.hlist.add(tempdir, itemtype=tix.IMAGETEXT, text=key, image=self.tk.call('tix', 'getimage', 'file'))
            # builds element's children
            for subelement in element:
                tempdir = dir + '.' + self.getIdx()
                self.buildTree(subelement, tempdir, deep+1)
            self.objects[dir] = element
     
        def browsecmd(self, dir):
            self.switch ^= 1
            if self.switch:
                return
            words = dir.split('.')
            parent = '.'.join(words[:-1])
            child = words[-1]
            if not self.isInteger(child):
                obj = self.objects[parent]
            else:
                obj = self.objects[dir]
            text = ET.dump(obj)
            self.properties.insert(text)
            print text
            #~ self.properties.delete('1.0', 'end')
     
    if __name__ == "__main__":
     
        import tkFileDialog as tkfd
     
        def getProperties():
            pass
     
        win = tix.Tk()
     
        #~ fname = tkfd.askopenfilename(initialdir='.\\', initialfile='noname.xml', filetypes=[("All", ".*"), ("XML files", ".xml")], title='Select xml file', parent=win)
        fname = './test.xml'
        if fname != None and fname != '':
            xml_tree = ET.parse(fname)
            tree = XML_TREE(win, xml_tree)
            tree.grid()
     
        win.deiconify()
        win.resizable(height=False, width=False)
        win.mainloop()
    A+

    Pfeuh

  3. #23
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Bon, je me suis vraisemblablement noyé dans un verre d'eau, l'équivalent du tk.Text est un subwidget de tix.ScrolledText. Je l'ai trouvé grâce à la méthode children()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {'hsb': <Tix._dummyScrollbar instance at 0x02342030>, 'text': <Tix._dummyText instance at 0x0233BFA8>, 'vsb': <Tix._dummyScrollbar instance at 0x0233BFD0>}
    A+

    Pfeuh

  4. #24
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    La documentation Python est trop rudimentaire.
    Essayez d'avoir le réflexe de lire les documentations TCL associées.
    Pour ScrolledText, les subwidgets sont mentionnés.
    Nota, si vous utilisiez Qt, vous auriez aussi à regarder les détails de ce que font les classes C++ et traduire "à la volée" le codage Python qui correspond.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #25
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Essayez d'avoir le réflexe de lire les documentations TCL associées.
    J'ai le réflexe d'essayer de lire les documentations TCL associées... Mais il faut bien avouer qu'on entre de plein pied dans le rébarbatif... Je suppose que ça viendra petit à petit...

  6. #26
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    J'ai hésité à créer un nouveau topic, puis je me suis dit que c'était directement dans la continuité des autres posts... Tix me balance le message ci dessous deux fois pour ce script et ne me dessine pas le label du LabelFrame:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (TixForm) Error:Trying to use more than one geometry
     manager for the same master window.
     Giving up after 50 iterations.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import Tix as tix
    win = tix.Tk()
    frm = tix.LabelFrame(win, label='Blablabla...')
    frm.grid()
    entry = tix.Entry(frm, width=80)
    entry.grid()
    win.mainloop()
    Rien de bien méchant niveau code, mais tout se passe comme si je n'avais pas le droit d'utiliser la méthode grid parce qu'une autre est déjà utilisée. Il suffit de commenter la ligne 6 pour s'en rendre compte. Autre problème, pour un LabelFrame, le label s'appelle 'text' en Tk mais 'label' en Tix... Bref, il faut quand même avouer qu'il ne suffit pas de remplacer 'Tkinter' pas 'Tix' pour passer d'une librairie à l'autre.

    La solution serait donc de mélanger des objets Tkinter et Tix?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import Tix as tix
    import Tkinter as tk
    win = tix.Tk()
    frm = tk.LabelFrame(win, text='Blablabla...')
    frm.grid()
    entry = tk.Entry(frm, width=80)
    entry.grid()
    win.mainloop()

    A+

    Pfeuh

  7. #27
    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
    Citation Envoyé par pfeuh Voir le message
    La solution serait donc de mélanger des objets Tkinter et Tix?
    Ou lire la doc
    CREATING WIDGETS INSIDE A LABELFRAME
    The LabelFrame widget packages a frame widget and a label into one mega widget. To create widgets inside a LabelFrame widget, one must create the new widgets relative to the frame subwidget and manage them inside the frame subwidget. An error will be generated if one tries to create widgets as immediate children of the LabelFrame. For example: the following is correct code, which creates new widgets inside the frame subwidget:

    tixLabelFrame .f
    set f [.f subwidget frame]
    button $f.b -text hi
    pack $f.b

    The following example code is incorrect because it tries to create immediate children of the LabelFrame .f:

    tixLabelFrame .f
    # wrong!
    button .f.b -text hi
    pack .f.b
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import Tix as tix
    win = tix.Tk()
    frm = tix.LabelFrame(win, label='Blablabla...')
    frm.grid()
    for w in frm.subwidget_list:
        print(w, frm.subwidget_list[w], frm.subwidget_list[w].winfo_manager())
    entry = tix.Entry(frm.subwidget_list['frame'], width=80)
    entry.grid()
    win.mainloop()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ('frame', <Tix._dummyFrame instance at 0xb76a542c>, 'tixForm')
    ('label', <Tix._dummyLabel instance at 0xb76a024c>, 'tixForm')
    # The Tix 'tixForm' geometry manager
    class Form:
    """The Tix Form geometry manager

    Widgets can be arranged by specifying attachments to other widgets.
    See Tix documentation for complete details"""
    ...
    @+
    Merci d'utiliser le forum pour les questions techniques.

  8. #28
    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,

    Dans la réponse j'ai laisser de coter la méthode pour rester dans une optique 'widget composite/mega widget' mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import Tix as tix
    win = tix.Tk()
    frm = tix.LabelFrame(win, label='Blablabla...')
    frm.grid()
    entry = tix.Entry(frm.subwidget('frame'), width=80)
    entry.grid()
    win.mainloop()
    @+
    Merci d'utiliser le forum pour les questions techniques.

  9. #29
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Merci pour cette réponse qui me montre que j'aurais pu trouver tout seul l'histoire du subwidget... S'il n'y a pas de contre indication, je préfère continuer de mélanger les widgets tkinter et tix et à croire naïvement que tix est une simple surcouche de tkinter.

    A+

    Pfeuh

  10. #30
    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,

    A vrais dire il n'y a pas vraiment de 'mélange' dans le code présenté.
    Citation Envoyé par pfeuh Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import Tix as tix
    import Tkinter as tk
    win = tix.Tk()
    frm = tk.LabelFrame(win, text='Blablabla...')
    frm.grid()
    entry = tk.Entry(frm, width=80)
    entry.grid()
    win.mainloop()
    Et du coup Tix en perd de son intérêt.

    Du fait de l'import from Tkinter import * de Tix.py vous pouvez ici directement écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import Tix as tix
    win = tix.Tk()
    frm = tix.LabelFrame(win, label='Blablabla...')
    frm.grid()
    entry = tix.Entry(frm.subwidget('frame'), width=80)
    entry.grid()
    print(locals())
    win.mainloop()
    {'tix': <module 'Tix' from '/usr/lib/python2.6/lib-tk/Tix.pyc'>, '__builtins__': <module '__builtin__' (built-in)>, 'win': <Tix.Tk instance at 0xb7774c6c>, '__file__': 'calcul.py', 'frm': <Tix.LabelFrame instance at 0xb777762c>, '__package__': None, 'entry': <Tkinter.Entry instance at 0xb74c13cc>, '__name__': '__main__', '__doc__': None}
    Le Widget Entry de Tkinter n'étant pas surchargé par Tix.py.

    L'écriture tk.<widget>/tix.<widget> reste toutefois on ne peut plus explicite pour le lecteur.

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

  11. #31
    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
    Petit détail sur les imports de Tix au passage:

    Tix.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from Tkinter import *
    from Tkinter import _flatten, _cnfmerge, _default_root
     
    # WARNING - TkVersion is a limited precision floating point number
    if TkVersion < 3.999:
        raise ImportError, "This version of Tix.py requires Tk 4.0 or higher"
     
    import _tkinter # If this fails your Python may not be configured for Tk
    ...
    import Tkinter, os
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import Tix as tix
    win = tix.Tk()
    frm = tix.Tkinter.LabelFrame(win)
    print(locals())
    {'tix': <module 'Tix' from '/usr/lib/python2.6/lib-tk/Tix.pyc'>, '__builtins__': <module '__builtin__' (built-in)>, 'win': <Tix.Tk instance at 0xb7724aec>, '__file__': 'calcul.py', 'frm': <Tkinter.LabelFrame instance at 0xb77275ec>, '__package__': None, '__name__': '__main__', '__doc__': None}
    Merci d'utiliser le forum pour les questions techniques.

  12. #32
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Merci pour ces éclaircissements.

    Citation Envoyé par PauseKawa Voir le message
    il n'y a pas vraiment de 'mélange' dans le code présenté.
    Dans le code présenté, non, effectivement. J'essaie d'utiliser Tix uniquement pour les widgets Tree et CheckList, le reste m'indiffère un peu. Les widgets avec scrollbars, par exemple, il y a belle lurette que je les fait en tkinter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    entry = tix.Entry(frm.subwidget('frame'), width=80)
    C'est effectivement plus élégant de ne garder que Tix... Mais qu'en est-il des librairies que j'utilise depuis des années et qui ne font référence qu'à tkinter? Je pense que la méthode consistant à mélanger ne demande aucune modification de ces scripts, ce qui est quand même important pour moi.

    A+

    Pfeuh

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Swing]JTreeMap : un widget open source
    Par Jense dans le forum Composants
    Réponses: 5
    Dernier message: 25/11/2005, 18h31
  2. Positionner un WidGet dans une table
    Par sorry60 dans le forum GTK+ avec C & C++
    Réponses: 7
    Dernier message: 05/11/2005, 19h22
  3. comment modifier les widgets dans une fenètre??
    Par afrikha dans le forum GTK+ avec C & C++
    Réponses: 6
    Dernier message: 14/10/2005, 14h48
  4. [Tkinter] widget Text
    Par t_om84 dans le forum Tkinter
    Réponses: 8
    Dernier message: 17/06/2005, 09h30
  5. [SWT]Eclipse Java : swt.widgets.Table
    Par watson dans le forum SWT/JFace
    Réponses: 3
    Dernier message: 01/10/2003, 09h07

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