Maison > développement back-end > Tutoriel Python > Comment puis-je transmettre des arguments supplémentaires via des signaux dans PyQt ?

Comment puis-je transmettre des arguments supplémentaires via des signaux dans PyQt ?

Patricia Arquette
Libérer: 2024-11-30 12:50:11
original
365 Les gens l'ont consulté

How Can I Pass Extra Arguments Through Signals in PyQt?

Passer des arguments supplémentaires via des signaux dans PyQt

Introduction

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.

Passer des arguments supplémentaires à l'aide des fonctions Lambda

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, ....))
Copier après la connexion

où :

  • param1, param2, ... sont les paramètres envoyés par le signal
  • arg1, arg2, ... sont les paramètres supplémentaires que vous souhaitez transmettre

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')
Copier après la connexion

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.

Passer des arguments supplémentaires à l'aide de functools.partial

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, ... ))
Copier après la connexion

où :

  • fun est le fonction à appeler lorsque le signal est émis
  • args1, arg2, ... sont les arguments supplémentaires que vous souhaitez pass

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')
Copier après la connexion

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.

Conclusion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal