PyQt fournit divers mécanismes de signaux et de slots pour la communication entre les objets. Les signaux sont émis pour informer les auditeurs des événements, tandis que les slots sont des méthodes exécutées lorsque les signaux sont reçus. Un cas d'utilisation courant consiste à transmettre des données des signaux aux emplacements. Cependant, que se passe-t-il si vous souhaitez envoyer des données supplémentaires avec le signal ? Dans cet article, nous allons explorer comment transmettre des arguments supplémentaires via des signaux à l'aide des fonctions lambda et functools.partial.
En Python, les fonctions lambda sont des fonctions anonymes qui peuvent être défini en ligne. Ils fournissent un moyen pratique de transmettre des arguments supplémentaires à un emplacement sans modifier la définition de l'emplacement. La syntaxe est la suivante :
signal.connect(lambda param1, param2, ..., arg1=val1, arg2=value2, ... : fun(param1, param2,... , arg1, arg2, ....))
où :
Par exemple, considérez ce qui suit code :
def addLineEdit(self): self.buttonGroup.buttonClicked['int'].connect(lambda i: self.input(i, "text")) @pyqtSlot(int) def input(self, button_or_id, DiffP): if isinstance(button_or_id, int): if button_or_id == 0: self.TotalInput[0].setText(DiffP) elif button_or_id == 1: self.TotalInput[54].setText('1')
Dans cet exemple, le signal ButtonClicked est connecté à un emplacement (entrée) à l'aide d'une fonction lambda qui passe l'argument supplémentaire "text". L'emplacement d'entrée utilise ensuite l'argument DiffP pour modifier le widget TotalInput.
Une autre approche pour transmettre des arguments supplémentaires via des signaux consiste à utiliser functools.partial. Cette fonction crée une nouvelle fonction qui a un sous-ensemble des arguments de la fonction d'origine déjà renseigné. La syntaxe est la suivante :
signal.connect(partial(fun, args1, arg2, ... ))
où :
Par exemple, considérons le code suivant :
from functools import partial self.buttonGroup.buttonClicked['int'].connect(partial(self.input, "text")) @pyqtSlot(int) def input(self, DiffP, button_or_id): if isinstance(button_or_id, int): if button_or_id == 0: self.TotalInput[0].setText(DiffP) elif button_or_id == 1: self.TotalInput[54].setText('1')
Dans cet exemple, functools.partial est utilisé pour créer une nouvelle fonction qui a déjà l'argument "texte" lié . Lorsque le signal ButtonClicked est émis, l'emplacement d'entrée est appelé avec l'argument DiffP et l'argument "text" précédemment transmis.
Passer des arguments supplémentaires via des signaux peut être une technique utile dans PyQt développement. Il vous permet de transférer des données supplémentaires avec le signal, enrichissant ainsi la communication entre les objets. En comprenant l'utilisation des fonctions lambda et de functools.partial, vous pouvez exploiter efficacement cette fonctionnalité dans vos applications PyQt.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!