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é)
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)
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