Maison > développement back-end > Tutoriel Python > Comment transmettre des arguments supplémentaires aux emplacements Qt à l'aide des fonctions Lambda ou functools.partial ?

Comment transmettre des arguments supplémentaires aux emplacements Qt à l'aide des fonctions Lambda ou functools.partial ?

Mary-Kate Olsen
Libérer: 2024-11-19 10:17:02
original
651 Les gens l'ont consulté

How to Pass Extra Arguments to Qt Slots Using Lambda Functions or functools.partial?

Passer des arguments supplémentaires via Connect

Lors de la connexion de slots dans des applications Qt, il peut être nécessaire de transmettre des arguments supplémentaires à la fonction slot. Cela peut être fait de deux manières : en utilisant les fonctions lambda ou functools.partial.

Utilisation des fonctions Lambda

Les fonctions Lambda vous permettent de transmettre des arguments supplémentaires sous forme d'arguments de mot-clé lors de la connexion d'un signal à un emplacement. Voici la syntaxe générale :

connect(lambda param1, param2, ..., arg1=val1, arg2=value2, ... : fun(param1, param2,... , arg1, arg2, ....))
Copier après la connexion

Où :

  • param1, param2, ... : Paramètres reçus par le signal
  • arg1, arg2, ... : Paramètres supplémentaires transmis à la fonction slot

Dans votre cas, le code serait be:

self.buttonGroup.buttonClicked['int'].connect(lambda i: self.input(i, "text"))

@pyqtSlot(int)
def input(self, button_or_id, DiffP):
    # Use the extra argument `DiffP` in the slot function
    ...
Copier après la connexion

Utilisation de Functools.Partial

Functools.partial fournit une autre méthode pour transmettre des arguments supplémentaires aux fonctions d'emplacement. Il crée une nouvelle fonction liée aux arguments spécifiés. La syntaxe générale est :

partial(fun, args1, arg2, ... )
Copier après la connexion

Où :

  • fun : Fonction d'emplacement cible
  • args1, arg2, ... : Arguments supplémentaires transmis au nouveau function

Voici comment vous l'utiliseriez dans votre code :

from functools import partial

...

self.buttonGroup.buttonClicked['int'].connect(partial(self.input, "text"))

@pyqtSlot(int)
def input(self, DiffP, button_or_id):
    # `DiffP` will be passed as the first argument to the slot function
    ...
Copier après la connexion

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!

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