[gull] Python et Tkinter

Daniel Cordey dc at mjt.ch
Thu Jul 6 10:55:32 CEST 2006


On Thursday 06 July 2006 09:59, Blaise Vogel wrote:

> new_window=Tkinter.Toplevel()	#root doit se désactiver
>
> Je peux trouver une solution en redirigeant le clavier par bind, mais pas
> la souris. Et je voudrais surtout pas que la fenêtre root puisse prendre le
> focus !

Sans m'etre penche sur Tkinter, le peu que j'en connais est qu'il fonctionne 
exactement comme toutes les librairies du meme genre. A savoir... toutes 
utiisent X11 !!! Il faut donc chercher la fonctionalite dans Tkinter, qui 
devrait bloquer tous les evemenements generes pour une fenetre.

En general, ce genre de fonctionalite est reservee a des fenetres de 
style "Dialog", qui "s'approprient" le clavier et la souris tant que l'on a 
pas slectionner un bouton... C'est aussi ce que l'on appelle le "grabing". 
Ceci doit etre effectue au travers du controle du window manager, et surtout 
pas en le court-circuitant !

Une fenetre 'toplevel' est particuliere dans le sens ou elle la la racine de 
toute une hierarchie de fenetere. Il doit donc etre relativement simple de 
desactiver tous les evenements pour cette hierarchie. Si l'on ne peut pas 
trouver de fonction desctivante, on peut tres bien attacher des "callbacks" 
ne faisant rien a cette fenetre racine. Le probleme est que l'on ne doit 
surtout pas avoir de bug afin de garantir que l'on poura "desctiver" 
ces "cllbacks" au moment voulu.

> Reste une autre question, si je supprime le gestionnaire de fenêtre avec
> ceci: root.overrideredirect(1)
> Puis le bind:
> root.bind('<Key>',keyboard)
> Mon bind ne réagit plus, rien trouvé dans la doc, à part un vieil article
> dans google.

La fonction overrideridirect(1) fait :

Instruct the window manager to ignore this widget if BOOLEAN is given with 1.

Donc, toute operation/event sur ce widget sera ignore par le window manager ! 
Il est evident que le widget se trouve maintenant aux abonnes-absents :-)

C'est donc bien cette fonction qui permet de "desactiver" un widget, qu'il 
soit toplevel ou pas.

dc



More information about the gull mailing list