Publicité
+ Répondre à la discussion
Page 2 sur 2 PremièrePremière 12
Affichage des résultats 21 à 32 sur 32
  1. #21
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 524
    Points : 8 339
    Points
    8 339

    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

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

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

    Informations forums :
    Inscription : mars 2006
    Messages : 855
    Points : 1 146
    Points
    1 146

    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 :
    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 Expert
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    mars 2006
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : mars 2006
    Messages : 855
    Points : 1 146
    Points
    1 146

    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 :
    {'hsb': <Tix._dummyScrollbar instance at 0x02342030>, 'text': <Tix._dummyText instance at 0x0233BFA8>, 'vsb': <Tix._dummyScrollbar instance at 0x0233BFD0>}
    A+

    Pfeuh

  4. #24
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    5 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 5 524
    Points : 8 339
    Points
    8 339

    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

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

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

    Informations forums :
    Inscription : mars 2006
    Messages : 855
    Points : 1 146
    Points
    1 146

    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 Expert
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    mars 2006
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : mars 2006
    Messages : 855
    Points : 1 146
    Points
    1 146

    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 :
    1
    2
    3
    (TixForm) Error:Trying to use more than one geometry
     manager for the same master window.
     Giving up after 50 iterations.
    Code :
    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 :
    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 953
    Points
    3 953

    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 :
    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 :
    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 953
    Points
    3 953

    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 :
    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 Expert
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    mars 2006
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : mars 2006
    Messages : 855
    Points : 1 146
    Points
    1 146

    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 953
    Points
    3 953

    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 :
    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 :
    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 Patrice BLANGARIN
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    juin 2006
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrice BLANGARIN
    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 720
    Points : 3 953
    Points
    3 953

    Par défaut

    Petit détail sur les imports de Tix au passage:

    Tix.py:
    Code :
    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 :
    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 Expert
    Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    mars 2006
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : mars 2006
    Messages : 855
    Points : 1 146
    Points
    1 146

    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 :
    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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •