# Autres langages > Python > GUI >  [tix] widget Checklist

## pfeuh

Salut,

Malgr l'absence de doc adapte aux dveloppeurs python, je pense avoir compris comment marche ce widget. Par contre pour le passage de paramtres aux diffrentes enfants, c'est le flou total... Quelqu'un saurait par exemple comment changer la couleur globale du checklist ou mieux, de ses diffrents enfants?



```

```

A+

Pfeuh

----------


## fred1599

Il semblerait que les options soient les mmes quelque-soit le widget, mais ne connaissant pas je vous laisse vrifier.

----------


## PauseKawa

Bonjour,

Comme ceci ?


```
tree.hlist.config(bg='red', fg='blue', selectbackground='blue', selectforeground='red')
```

De mmoire il supporte les options du Widget Frame.

@+

----------


## pfeuh

Salut,




> ```
> tree.hlist.config(bg='red', fg='blue', selectbackground='blue', selectforeground='red')
> ```


Oui, c'est bien ce que je cherchais, merci beaucoup. Ce qui me gne, en fait, c'est que l'utilisation est quand mme diffrente de Tkinter o j'aurais directement pu les passer en paramtres  la cration du widget. L, il faut utiliser la mthode config, que je dcouvre.

A+

Pfeuh

----------


## fred1599

La mthode config est dj existante avec tkinter...

----------


## wiztricks

Salut,




> La mthode config est dj existante avec tkinter...


La surprise avec Tix, c'est la construction d'une composition de widgets.
Tk, librairie graphique n'adresse pas ce sujet et ne propose que le basique: partir d'une Frame et insrer les subwidgets dedans.

De fait, suivant la fonction du widget on pourrait configurer "globalement" et appliquer les items de configurations aux diffrents subwidgets, avoir des configurations spcifiques  chaque subwidget, effectuer un mix des deux.

Pour comprendre, il faut arriver  lire la documentation TCL de Tix et les sources de l'interface Python pour voir comment cela a t mis en uvre.
Rien de trs compliqu mais parfois dcourageant.

- W

----------


## pfeuh

> La mthode config est dj existante avec tkinter...


Certes, mais pour le moins redondante... Comme il existe au moins 3 ou 4 faons diffrentes d'accder aux attributs, j'ai ignor config jusqu' prsent. 




> Rien de trs compliqu mais parfois dcourageant.


Tout  fait, dcourageant, c'est le mot.

Une autre chose de vraiment dcourageante, c'est de me rendre compte qu'une fentre modale Tix, bien qu'isole dans un script  part ne se mlange pas avec des objets Tkinter. Tant que j'appelle du standard, comme un Toplevel ou un Button, pas de problme, mais ds que j'appelle du spcifique Tix comme le CheckList, Tkinter qui tait l en premier me pte une exception.  Tkinter est pour moi invitable puisque prsent dans les bibliothques d'import que j'utilise.



```

```

----------


## wiztricks

Salut,




> Tkinter qui tait l en premier me pte une exception.  Tkinter est pour moi invitable puisque prsent dans les bibliothques d'import que j'utilise.
> 
> 
> 
> ```
> 
> ```


Je n'ai peut tre pas tout compris mais...
Pour que les widgets Tix soit dfinis (dans l'interprteur Tk qui se cache drrire tk.call) il faut initialiser le Tk de Tix et pas celui de Tk.
En code:


```

```

Mais peut tre c'est ce que vous faites dj (et je n'ai pas compris la question)
- W

----------


## pfeuh

> Mais peut tre c'est ce que vous faites dj


Non, je ne le faisais pas, merci du tuyau, je comprends la logique de la chose. Donc je viens de le faire, en insrant les 2 lignes suivantes tout au dbut du script principal avant les imports:



```

```

Maintenant l'erreur claque sur sur la cration d'un LabelFrame.  ::roll:: 



```

```

----------


## wiztricks

Hum, ca ne devrait pas tre comme !

La classe LabelFrame tant dans Tkinter et dans Tix, il faut prciser laquelle on veut. Dans la trace que vous fournissez, je ne comprends pas comment l'appel a tk.LabelFrame passe dans le tix.LabelFrame.


```

```

C'est comme si la variable locale tk dans le module gui.py pointait sur le module Tix au lieu de Tkinter. 
Si vous faites le test "basique":


```

```

Ca ne passe pas dans tix.LabelFrame (encore heureux) et "text" est bien accept par le LabelFrame Tk.

Comment,  quoi est assigne tk dans le module gui.py?
- W

----------


## pfeuh

> Comment,  quoi est assigne tk dans le module gui.py?


Euh... Je ne peux pas rpondre car j'ai fait quelques modifications entre temps, en dsespoir de cause  ::oops::  Mais il y a fort  parier que c'tait Tix. En tout cas merci, j'ai eu le dclic au sujet du mlange Tkinter/Tix. a semble cohabiter dsormais sans rels problmes.

Il ne me reste plus que quelques histoires de fentres modales  rsoudre. J'ai une fentre principale, Tix.Tk() et un nombre variable de fentres Toplevel, une par priphrique, les priphriques s'ajoutant et s'enlevant par l'utilisateur. On doit pouvoir  tout moment ajouter ou supprimer des objets dans les fentres des priphriques, d'o le Tix.CheckList en modal dclench par un Toplevel.

Mais  la sortie, les fentres sont totalement dsorganises, il y en a qui sont passes derrire toutes les autres, d'autres qui se retrouvent au premier plan , etc... Pire, La fentre qui est sense tre modale se retrouve derrire les autres...  ::roll::  J'ai cru comprendre qu'il y avait une histoire de parent diffrent du container, bref, je vais investiguer de ce ct l. Encore merci pour tout.

A+

Pfeuh

----------


## wiztricks

Salut,

Une Toplevel n'est pas "modale" mme si elle apparat gnralement "au dessus", par dfaut. La FAQ Tk donne quelques indications pour faire .

Avec plusieurs Toplevel, il va y avoir des chevauchements et certaines oprations pourront demander de redessiner toute la hirarchie. 
Normalement,  se redessine au bon endroit mais l'empilement suit l'ordre (z-order) de cration des Toplevel mme si l'utilisateur a chang ce "stacking" (ce qu'il voit  l'cran) suite  des clicks _dans_ les Toplevels.
Les clicks donnent le focus et le focus "pousse" la Toplevel au dessus mais ne change pas le z-order: il faudrait faire un .raise.

- W

----------


## pfeuh

Ds que j'ai un moment, je code un script minimaliste de ce que je voudrais faire, je crois que ce sera le plus clair.

A+

Pfeuh

----------


## PauseKawa

Bonsoir,

A partir du moment que vous connaissez .config(), et donc les options d'un Widget(subwidget), rien ne vous empche de vous amuser.



```

```

@+

----------


## PauseKawa

::oops::  'highlightthickness'  ::oops::  Vive le cut/paste...



```

```

----------


## pfeuh

Salut,

Voici le code minimaliste. En l'crivant, j'ai compris quelques erreurs et j'ai donc corrig, mais il doit en rester pas mal sur la gestion des fentres. Au lancement de l'application tout va bien, la fentre principale a le focus et elle est au dessus des autres, mais aprs, a devient le Bronx...   ::?: 

A+

Pfeuh

----------


## wiztricks

Salut,




> Voici le code minimaliste. En l'crivant, j'ai compris quelques erreurs et j'ai donc corrig, mais il doit en rester pas mal sur la gestion des fentres. Au lancement de l'application tout va bien, la fentre principale a le focus et elle est au dessus des autres, mais aprs, a devient le Bronx...


Est ce que vous voulez que la fentre principale reste toujours au-dessus?
- W

----------


## pfeuh

> Est ce que vous voulez que la fentre principale reste toujours au-dessus?


Il faudrait dfinir "toujours", je pense que l, non, je dtaille:

Rajouter une fentre se fait par le bouton "ADD WINDOW" de la fentre principale. Dans ce cas, oui, il faudrait qu'aprs le rajout la fentre principale soit au dessus et ait le focus.

Mais quand on change la liste des objets affichs d'une fentre "toto", on le fait  partir du bouton "SELECT OBJECTS" de la fentre "toto", donc aprs la slection c'est "toto" qui devrait tre au dessus et avoir le focus. a par contre, a a l'air de se passer bien. L je rpondrai non, la fentre principale ne devrait ni tre au dessus des autres ni avoir le focus puisque ce serait le rle de "toto".

----------


## wiztricks

Salut,




> Rajouter une fentre se fait par le bouton "ADD WINDOW" de la fentre principale. Dans ce cas, oui, il faudrait qu'aprs le rajout la fentre principale soit au dessus et ait le focus.


Pourquoi ne pas le coder cela dans:


```

```

- W

----------


## pfeuh

> Pourquoi ne pas le coder cela dans:
> 
> 
> ```
> win.tkraise(w)
> ```


Parce que je ne connaissais pas... a fait exactement ce que je cherche. Comme je n'ai pas cette culture, je m'embrouille avec tkraise, lift etc...  ::cry::

----------


## wiztricks

> 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

----------


## pfeuh

Salut,

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



```

```

A+

Pfeuh

----------


## pfeuh

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 grce  la mthode children()  ::mrgreen:: 



```
{'hsb': <Tix._dummyScrollbar instance at 0x02342030>, 'text': <Tix._dummyText instance at 0x0233BFA8>, 'vsb': <Tix._dummyScrollbar instance at 0x0233BFD0>}
```

A+

Pfeuh

----------


## wiztricks

Salut,

La documentation Python est trop rudimentaire.
Essayez d'avoir le rflexe de lire les documentations TCL associes.
Pour ScrolledText, les subwidgets sont mentionns.
Nota, si vous utilisiez Qt, vous auriez aussi  regarder les dtails de ce que font les classes C++ et traduire " la vole" le codage Python qui correspond.
- W

----------


## pfeuh

> Essayez d'avoir le rflexe de lire les documentations TCL associes.


J'ai le rflexe *d'essayer* de lire les documentations TCL associes... Mais il faut bien avouer qu'on entre de plein pied dans le rbarbatif...  ::?:  Je suppose que a viendra petit  petit...  ::ccool::

----------


## pfeuh

Salut,

J'ai hsit  crer 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:



```

```



```

```

Rien de bien mchant niveau code, mais tout se passe comme si je n'avais pas le droit d'utiliser la mthode grid parce qu'une autre est dj utilise. Il suffit de commenter la ligne 6 pour s'en rendre compte. Autre problme, pour un LabelFrame, le label s'appelle 'text' en Tk mais 'label' en Tix... Bref, il faut quand mme avouer qu'il ne suffit pas de remplacer 'Tkinter' pas 'Tix' pour passer d'une librairie  l'autre.

La solution serait donc de mlanger des objets Tkinter et Tix?



```

```


A+

Pfeuh

----------


## PauseKawa

> La solution serait donc de mlanger 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:
> ...




```

```



```

```




> # 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"""
> ...


@+

----------


## PauseKawa

Bonjour,

Dans la rponse j'ai laisser de coter la mthode pour rester dans une optique 'widget composite/mega widget' mais:


```

```

@+

----------


## pfeuh

Merci pour cette rponse qui me montre que j'aurais pu trouver tout seul l'histoire du subwidget...  ::?:  S'il n'y a pas de contre indication, je prfre continuer de mlanger les widgets tkinter et tix et  croire navement que tix est une simple surcouche de tkinter.  ::aie:: 

A+

Pfeuh

----------


## PauseKawa

Bonjour,

A vrais dire il n'y a pas vraiment de 'mlange' dans le code prsent.



> ```
> 
> ```


Et du coup Tix en perd de son intrt.

Du fait de l'import _from Tkinter import *_ de _Tix.py_ vous pouvez ici directement crire


```

```




> {'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.

@+

----------


## PauseKawa

Petit dtail sur les imports de Tix au passage:

_Tix.py:_


```

```



```

```




> {'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}

----------


## pfeuh

Merci pour ces claircissements.




> il n'y a pas vraiment de 'mlange' dans le code prsent.


Dans le code prsent, non, effectivement. J'essaie d'utiliser Tix uniquement pour les widgets Tree et CheckList, le reste m'indiffre un peu. Les widgets avec scrollbars, par exemple, il y a belle lurette que je les fait en tkinter.



```
entry = tix.Entry(frm.subwidget('frame'), width=80)
```

C'est effectivement plus lgant de ne garder que Tix... Mais qu'en est-il des librairies que j'utilise depuis des annes et qui ne font rfrence qu' tkinter? Je pense que la mthode consistant  mlanger ne demande aucune modification de ces scripts, ce qui est quand mme important pour moi.

A+

Pfeuh

----------

