Comment puis-je transmettre des arguments supplémentaires aux emplacements Qt dans PyQt ?

Patricia Arquette
Libérer: 2024-11-19 16:48:03
original
162 Les gens l'ont consulté

How Can I Pass Extra Arguments to Qt Slots in PyQt?

Transmission d'arguments supplémentaires via les slots Qt

Dans les applications PyQt, les slots sont des fonctions membres qui sont invoquées lorsqu'un signal est émis. Ces signaux peuvent être émis par divers objets Qt, tels que des boutons ou des widgets. Par défaut, les slots reçoivent les paramètres transmis par le signal. Cependant, il est également possible de transmettre des arguments supplémentaires aux slots.

Problème : Passage d'une variable via les slots

Considérez le scénario suivant : Vous disposez d'une fonction qui définit une variable nommée DiffP. Vous souhaitez transmettre cette variable à un emplacement connecté à un événement de clic de bouton.

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        [...]
        self.button.clicked.connect(self.some_slot)

    def some_slot(self):
        # Here you want to access the 'DiffP' variable defined in another function
Copier après la connexion

Solution : Utilisation des fonctions Lambda

Une façon de transmettre des arguments supplémentaires via les emplacements consiste à utiliser lambda fonctions. Les fonctions Lambda sont des fonctions anonymes qui peuvent être définies en ligne. Vous pouvez créer une fonction lambda qui prend à la fois les paramètres d'emplacement par défaut et les arguments supplémentaires que vous souhaitez transmettre.

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        [...]
        self.button.clicked.connect(lambda: self.some_slot("DiffP"))

    def some_slot(self, DiffP):
        # Here you can access the 'DiffP' variable
Copier après la connexion

Dans cet exemple, la fonction lambda prend l'argument supplémentaire DiffP et le transmet à la fonction some_slot .

Solution : Utiliser functools.partial

Une autre façon de transmettre des arguments supplémentaires via les slots consiste à utiliser la fonction functools.partial. La fonction partielle crée une nouvelle fonction partiellement appliquée avec quelques arguments. Vous pouvez utiliser partial pour créer une fonction qui prend uniquement les paramètres d'emplacement par défaut et transmettre les arguments supplémentaires en tant qu'arguments liés.

from functools import partial

class MyWidget(QtWidgets.QWidget):
    def __init__(self):
        [...]
        self.button.clicked.connect(partial(self.some_slot, "DiffP"))

    def some_slot(self, DiffP):
        # Here you can access the 'DiffP' variable
Copier après la connexion

Dans cet exemple, la fonction partielle crée une nouvelle fonction qui prend uniquement le paramètre button_or_id et y lie l'argument DiffP. Lorsque le slot est invoqué, la nouvelle fonction sera appelée avec les arguments corrects.

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