OVH Cloud OVH Cloud

TKinter + modif dynamique de listbox

5 réponses
Avatar
Yann.K
Bonjour.

Je dispose actuellement d'une fenêtre TKinter dans laquelle se trouve entre
autre une liste déroulante (liste de fiches disonibles) et un bouton.
Le bouton provoque l'ouverture d'une nouvelle fenêtre permettant de saisir
une nouvelle fiche.
Cela fonctionne très bien.
Je voudrais cependant qu'à la fermeture du formulaire de saisie, la liste
déroulante de la première fenêtre soit actualisée et intègre la nouvelle
saisie...

Quelqu'un a-t'il une idée de la procédure à suivre?

Merci d'avance.
--
Yann K.

5 réponses

Avatar
Punisher
J'avais fait un programme dans ce style.
Le truc que j'utilisais, c'étais de supprimer l'objet "liste déroulante"
pour la recréer avec les nouvelles données de la BD.
Je pense qu'il doit y avoir d'autre méthodes mais je ne l'avais pas trouvé
dans la doc. Donc en tant que newbie, j'ai fait "à la brute".

Si je retrouve le bout de code j'essaie de le poster.

Christophe

Yann.K wrote:
Bonjour.

Je dispose actuellement d'une fenêtre TKinter dans laquelle se trouve
entre autre une liste déroulante (liste de fiches disonibles) et un
bouton.
Le bouton provoque l'ouverture d'une nouvelle fenêtre permettant de
saisir une nouvelle fiche.
Cela fonctionne très bien.
Je voudrais cependant qu'à la fermeture du formulaire de saisie, la
liste déroulante de la première fenêtre soit actualisée et intègre la
nouvelle saisie...

Quelqu'un a-t'il une idée de la procédure à suivre?

Merci d'avance.


Avatar
Yann.K
Eric Brunel wrote:
Sans doute, si on avait une idée du problème exact ;-) Qu'est-ce qui te
pose problème? La détection de la fermeture du formulaire de saisie? La
mise à jour de la listbox? Les deux? Autre chose?
Les deux mon capitiane ;-).

En fait, je voudrais qu'à la fermeture de la fenêtre de saisie, la fenetre
principale (ouverte dessous) réapparaisse avec la listbox mise à jour.
Le problème est que cette fenêtre principale est déjà ouverte.
Si elle ne l'était pas, je n'aurais pas ce problème puisqu'à l'ouverture, la
listbox est géneré dynamiquement en récupérant la liste des fiches
existantes...

Merci.
--
Yann K.

Avatar
Eric Brunel
On Mon, 23 May 2005 15:49:04 +0200, Yann.K wrote:

Bonjour.

Je dispose actuellement d'une fenêtre TKinter dans laquelle se trouve entre
autre une liste déroulante (liste de fiches disonibles) et un bouton.
Le bouton provoque l'ouverture d'une nouvelle fenêtre permettant de saisir
une nouvelle fiche.
Cela fonctionne très bien.
Je voudrais cependant qu'à la fermeture du formulaire de saisie, la liste
déroulante de la première fenêtre soit actualisée et intègre la nouvelle
saisie...

Quelqu'un a-t'il une idée de la procédure à suivre?


Sans doute, si on avait une idée du problème exact ;-) Qu'est-ce qui te pose problème? La détection de la fermeture du formulaire de saisie? La mise à jour de la listbox? Les deux? Autre chose?

Merci d'avance.


Pas de mal...
--
python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17;8(%,5.Z65'*9--56l7+-'])"

Avatar
Eric Brunel
On Thu, 26 May 2005 08:48:08 +0200, Yann.K wrote:

Eric Brunel wrote:
Sans doute, si on avait une idée du problème exact ;-) Qu'est-ce qui te
pose problème? La détection de la fermeture du formulaire de saisie? La
mise à jour de la listbox? Les deux? Autre chose?
Les deux mon capitiane ;-).

En fait, je voudrais qu'à la fermeture de la fenêtre de saisie, la fenetre
principale (ouverte dessous) réapparaisse avec la listbox mise à jour.
Le problème est que cette fenêtre principale est déjà ouverte.
Si elle ne l'était pas, je n'aurais pas ce problème puisqu'à l'ouverture, la
listbox est géneré dynamiquement en récupérant la liste des fiches
existantes...


Je ne suis toujours pas très sur de comprendre le problème exact, mais voilà un exemple de code qui fait plus ou moins ce que tu veux :

----------------------------------------------------------------------
from Tkinter import *

root = Tk()

## La listbox
l = Listbox(root)
l.pack(side=TOP)

## La variable Python pour le dialogue d'ajout
dlg = None

## Variable Tkinter pour la valeur à ajouter
addedVar = StringVar()

## La fonction pour ajouter la valeur a la liste
def confirmAdd():
## Ajout effectif
l.insert(END, addedVar.get())
## Fermeture du dialogue
if dlg is not None:
dlg.destroy()

## Une fonction pour ouvrir le dialogue d'edition
def openDlg():
## On construit le dialogue
global dlg
dlg = Toplevel()
## L'entrée pour la valeur
e = Entry(dlg, textvariable­dedVar)
e.pack(side=TOP)
## Les boutons
Button(dlg, text='OK', command=confirmAdd).pack(side=LEFT)
Button(dlg, text='Annuler', command=dlg.destroy).pack(side=LEFT)

## Bouton pour ouvrir le dialogue
Button(root, text='Ajouter...', command=openDlg).pack(side=TOP)

## C'est parti!
root.mainloop()
----------------------------------------------------------------------

La mise à jour de la liste se fait simplement dans la fonction confirmAdd, qui est appelée par le bouton 'OK' du dialogue d'ajout. C'était ça le problème?
--
python -c "print ''.join([chr(154 - ord(c)) for c in 'U(17zX(%,5.zmz5(17;8(%,5.Z65'*9--56l7+-'])"


Avatar
Yann.K
Eric Brunel wrote:
La mise à jour de la liste se fait simplement dans la fonction confirmAdd,
qui est appelée par le bouton 'OK' du dialogue d'ajout. C'était ça le
problème?
Oui!


Milles excuses de ne pas avoir répondu plus tôt, mais le boulot...

En fait, je ne pensais pas qu'on puisse impacter une fenêtre de plus haut
niveau en faisant juste un "insert" dans la fenêtre fille...

Comme quoi, il me reste un sacré bout de chemin à faire!

Merci de l'aide apportée.
--
Yann.K