2010-10-08 5 views
1

J'ai une liste d'actions dans un menu en PyQt, une pour chaque flux que je veux afficher. J'ai donc un Y qui positionne le flux actif sur Y, Z le met sur Z, etc. (Pour un programme de lecture webcomique).PyQt et QSignalMapper/lambdas - signaux multiples, emplacement unique

J'ai chacun sur le menu, et a estimé qu'une approche automatisée pourrait être meilleure; plutôt que de taper à chaque fois. Quelque chose comme une fonction qui l'ajoute à un dictionnaire, puis le connecte avec un signal pour chacun à un seul emplacement. Cependant, je veux que cette fonction de slot, disons Foo, prenne un paramètre pour décider de ce qui a été cliqué. Donc, si X a été cliqué, alors X, Y passe Y, etc.

Regardé autour, et une question SO dit d'utiliser un lambda, qui n'a pas l'air ... juste en quelque sorte.

L'autre façon était avec QSignalMapper. J'ai essayé de le chercher, mais je n'ai pas trouvé d'exemple sur la façon de l'utiliser.

Quelqu'un peut-il aider?

Merci!

Répondre

4

Vous pouvez utiliser functools.partial (lien to the documentation):

import functools 
... 

# note that these are the 'new style' slot connections (not necessarily needed) 
self.menu_entry_x.triggered.connect(functools.partial(myfunc, x)) 
self.menu_entry_y.triggered.connect(functools.partial(myfunc, y)) 

L'exemple ci-dessus est très basique, mais je pourrais développer si vous avez d'autres questions.

+0

Ah, fonctionne bien autant que je l'ai utilisé, merci! –

+0

Donc, ça marche pour quelque chose comme: some_func (self, x, y): –