Remarques sur la définition des slots PySide (2)

Lorsque vous spécifiez un signal avec PySide, vous pouvez généralement le spécifier comme suit.

signal_without_arg


# (object).(signal).connect(slot)
self.button1.clicked.connect(self.without_arg)

Cependant, comme clicked, Il faut faire très attention si le signal peut avoir des arguments optionnels. Avec la méthode de spécification ci-dessus, il est interprété comme un signal sans arguments optionnels, donc si vous souhaitez utiliser un signal avec des arguments optionnels, vous devez spécifier le type de l'argument explicitement passé comme suit.

signal_with_arg


self.button2.clicked[bool].connect(self.with_arg)

Le code pour vérifier le comportement est le suivant. Si vous cliquez sur button1 / button2, vous pouvez voir que chaque bouton est lié à un emplacement (without_arg / with_arg) avec un nombre différent d'arguments.

onoff_button.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys
from PySide.QtGui import QApplication, QMainWindow, QWidget, QPushButton,\
    QVBoxLayout


class OnOffButtonWidget(QWidget):

    def __init__(self):
        super(OnOffButtonWidget, self).__init__()
        self.__init_ui()
        self.__init_event()

    def __init_ui(self):
        self.button1 = QPushButton('button1', self)
        self.button2 = QPushButton('button2', self)
        self.button1.setCheckable(True)
        self.button2.setCheckable(True)

        vbox = QVBoxLayout()
        vbox.addWidget(self.button1)
        vbox.addWidget(self.button2)
        self.setLayout(vbox)

    def __init_event(self):
        self.button1.clicked.connect(self.without_arg)
        self.button2.clicked[bool].connect(self.with_arg)

    def without_arg(self):
        print 'without_arg'

    def with_arg(self, clicked):
        print 'with arg:{0}'.format(clicked)


def main():
    app = QApplication(sys.argv)
    window = QMainWindow()
    window.setCentralWidget(OnOffButtonWidget())
    window.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

(Sortie lorsque le bouton est cliqué)

output


without_arg   (Sortie lorsque button1 est cliqué)
with arg:True (Sortie lorsque button2 est cliqué)

Postscript

Puisque vous pouvez voir la valeur par défaut en regardant le document (ex. Cliqué ([coché = faux])), vous pouvez spécifier un emplacement commun en utilisant l'argument par défaut.

with_optional


    def __init_event(self):
        self.button1.clicked.connect(self.with_optional)
        self.button2.clicked[bool].connect(self.with_optional)

    def with_optional(self, clicked=False):
        print 'with arg:{0}'.format(clicked)

Addendum 2

Activé Dans certains cas, le nom et le nombre d'arguments sont identiques, mais seul le type de l'argument est différent. Dans ce cas, il est nécessaire de spécifier le type.

with_same


    def __init_event(self):
        self.combo.activated[str].connect(self.on_activated)
        self.combo.activated[int].connect(self.on_activated_init)

    def on_activated(self, text):
        self.label.setText(text)

    def on_activated_init(self, index):
        print index

Recommended Posts

Remarques sur la définition des slots PySide (2)
Précautions lors de la définition des emplacements pour PySide
Notes sur Flask
Notes de céleri sur Django
Installez PySide2 sur Ubuntu
Remarques sur l'installation de PycURL
Remarques sur l'utilisation d'Alembic
Remarques sur les fonctions de la famille SciPy.linalg
Remarques sur tf.function et traçage
Remarques sur l'installation de dlib sur Mac
Notes sur le module sqlite3 de python
Remarques sur les * args et ** kargs
[Django] Remarques sur l'utilisation de django-debug-toolbar
Notes sur pyenv et Atom
[Python] Notes sur l'analyse des données
Remarques sur l'optimisation à l'aide de Pytorch
Remarques sur l'installation de Python sur votre Mac
Remarques sur l'installation de pipenv sur votre Mac
Remarques sur l'installation d'Anaconda 3 sur Windows
Remarques sur imshow () d'OpenCV
Remarques sur l'installation de Python sur CentOS
Notes sur Python et les types de dictionnaire
Remarques sur la gestion des packages avec conda
Remarques sur l'utilisation de la post-réception et de la post-fusion
Remarques sur l'utilisation des featuretools
Remarques sur l'installation de Python à l'aide de PyEnv
Notes sur l'utilisation de rstrip avec python.
Remarques sur l'accès à dashDB à partir de python
Remarques sur l'utilisation de matplotlib sur le serveur
Remarques sur la rédaction de requirements.txt
Remarques sur l'installation d'Ubuntu 18.04 sur XPS 15 7590
(Débutant) Remarques sur l'utilisation de pyenv sur Mac