OVH Cloud OVH Cloud

Tk::Scrolled avec Tk::Text

4 réponses
Avatar
Srand
Bonjour,

J'utilise un widget Tk::Text =E0 l'int=E9rieur d'un Tk::Scrolled, ainsi
que la m=E9thode windowcreate pour ins=E9rer des widgets de type label et
entry pour r=E9cup=E9rer des param=E8tres.

Cependant mon Tk::Text sert aussi =E0 afficher du texte. En fait, mon
Tk::Text est multifonction est lorsque je supprime toutes les lignes
pour y ins=E9rer mon texte, tous les objets label et entry
pr=E9c=E9demment cr=E9=E9s sont perdus. Il faut donc lorsque l'on veut
modifier les param=E8tres recr=E9er =E0 chaque fois ces objets. Y aurait
il une m=E9thode pour ne pas perdre ces objets ? Bien s=FBr toujours en
utilisant mon Tk::Text et non en le dupliquant ?

En effet, la recr=E9ation des objets est palpable m=EAme si cela prend
moins de 2s.

Merci.

4 réponses

Avatar
Paul Gaborit
À (at) 27 Sep 2005 07:13:53 -0700,
"Srand" écrivait (wrote):
J'utilise un widget Tk::Text à l'intérieur d'un Tk::Scrolled, ainsi
que la méthode windowcreate pour insérer des widgets de type label et
entry pour récupérer des paramètres.

Cependant mon Tk::Text sert aussi à afficher du texte. En fait, mon
Tk::Text est multifonction est lorsque je supprime toutes les lignes
pour y insérer mon texte, tous les objets label et entry
précédemment créés sont perdus. Il faut donc lorsque l'on veut
modifier les paramètres recréer à chaque fois ces objets. Y aurait
il une méthode pour ne pas perdre ces objets ? Bien sûr toujours en
utilisant mon Tk::Text et non en le dupliquant ?


Certainement en utilisant des tags et des marks pour retrouver les
différentes catégories d'objets... Je ne sais plus si les images et
les widgets sont considérés comme des annotations de type tags ou
marks (je pencherai plutôt pour ce dernier cas). Le plus simple pour
le retrouver est de demander un 'dump' (avec l'otion '-all') du
contenu pour voir à quoi ils sont rattachés.

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Scetbon Cyril
Paul Gaborit wrote:

À (at) 27 Sep 2005 07:13:53 -0700,
"Srand" écrivait (wrote):


J'utilise un widget Tk::Text à l'intérieur d'un Tk::Scrolled, ainsi
que la méthode windowcreate pour insérer des widgets de type label et
entry pour récupérer des paramètres.

Cependant mon Tk::Text sert aussi à afficher du texte. En fait, mon
Tk::Text est multifonction est lorsque je supprime toutes les lignes
pour y insérer mon texte, tous les objets label et entry
précédemment créés sont perdus. Il faut donc lorsque l'on veut
modifier les paramètres recréer à chaque fois ces objets. Y aurait
il une méthode pour ne pas perdre ces objets ? Bien sûr toujours en
utilisant mon Tk::Text et non en le dupliquant ?




Certainement en utilisant des tags et des marks pour retrouver les
différentes catégories d'objets... Je ne sais plus si les images et
les widgets sont considérés comme des annotations de type tags ou
marks (je pencherai plutôt pour ce dernier cas). Le plus simple pour
le retrouver est de demander un 'dump' (avec l'otion '-all') du
contenu pour voir à quoi ils sont rattachés.


Le problème est que les objets sont détruits lorsque j'utilise la

fonction delete pour pouvoir afficher du texte seul.


Avatar
Paul Gaborit
À (at) Tue, 27 Sep 2005 21:11:46 +0200,
Scetbon Cyril écrivait (wrote):
Le problème est que les objets sont détruits lorsque j'utilise la
fonction delete pour pouvoir afficher du texte seul.


Peut-être n'ai-je pas vraiment compris ce que vous vouliez
faire... Une rapide description du besoin aiderait sûrement ;-)

En fait, vous aimeriez cacher des objets momentanément (pour afficher
juste du texte) puis les faire réapparaître plus tard sans devoir les
recréer... Je crois malheureusement que ce n'est pas possible.

Petit extrait de la doc de Tk::Text :

Each embedded window occupies one character's worth of index
space in the text widget, and it may be referred to either by the
name of its embedded window or by its position in the widget's
index space. If the range of text containing the embedded window
is deleted then the window is destroyed.

C'est cette dernière phrase qui semble montrer que ce n'est pas
possible.

Ce qui est faisable par contre, c'est d'insérer un Frame dans un
Scrolled. Et de placer dans ce Frame plusieurs Text avec des
sous-éléments autres intercalées entre chaque Text. L'ensemble de ces
sous-éléments (Text et autres) étant gérés par pack. Comme on peut
faire entrer ou sortir un sous-élément d'un pack sans le détruire (le
sous-élément), on peut peut-être faire quelque chose approchant ce que
vous voulez faire...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Srand
c'est ce que je pensais. J'opte donc pour un notebook :-)

Merci pour ces infos.