PyQt5 señales y ranuras (signals and slots)
Aplicaciones gráficas (GUI) son controlados por eventos,
a diferencia de las aplicaciones de consola o de terminal. La acción de
un usuario como hacer clic en un botón o seleccionar un elemento en una
lista se denomina evento.
Si se produce un evento, cada widget PyQt5 puede emitir una señal. Una señal no ejecuta ninguna acción, eso es hecho por una ranura.
Introducción a Señales y Ranuras (signals and slots)
Considera este ejemplo:
Ejemplo
Podemos crear un método (slot) que está conectado a un widget. Un slot es cualquier función o método invocable.
Al ejecutar la aplicación, podemos hacer clic en el botón para ejecutar la acción (slot).
AdelanteAtras
Si se produce un evento, cada widget PyQt5 puede emitir una señal. Una señal no ejecuta ninguna acción, eso es hecho por una ranura.
Introducción a Señales y Ranuras (signals and slots)
Considera este ejemplo:
button.clicked.connect(self.slot_method)
El button click (signal/señal) está conectado (connected) a la acción (slot/ranura).
En este ejemplo, el método slot_method se llamará si la señal emite.
Este principio de conectar métodos de slots/ranuras o función a un widget, se aplica a todos los widgets.widget.signal.connect(slot_method)o podemos definir explícitamente la señal:
QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)PyQt admite muchos tipos de señales, no solo clics
Ejemplo
Podemos crear un método (slot) que está conectado a un widget. Un slot es cualquier función o método invocable.
Al ejecutar la aplicación, podemos hacer clic en el botón para ejecutar la acción (slot).
from PyQt5.QtWidgets import (QApplication, QComboBox, QDialog, QDialogButtonBox, QFormLayout, QGridLayout, QGroupBox, QHBoxLayout, QLabel, QLineEdit, QMenu, QMenuBar, QPushButton, QSpinBox, QTextEdit, QVBoxLayout) import sys class Dialog(QDialog): def slot_method(self): print('método de slot/ranura llamado.') def __init__(self): super(Dialog, self).__init__() button=QPushButton("Click") button.clicked.connect(self.slot_method) mainLayout = QVBoxLayout() mainLayout.addWidget(button) self.setLayout(mainLayout) self.setWindowTitle("Ejemplo de botón") if __name__ == '__main__': app = QApplication(sys.argv) dialog = Dialog() sys.exit(dialog.exec_())
AdelanteAtras
buen ejemplo
ResponderBorrar