시그널과 슬롯

행동하는 개발자·2022년 10월 26일
0

PySide, PyQt

목록 보기
14/20

버튼을 눌렀을 때, 뭔가 작동한다.

-> 버튼을 눌렀을 때, 발생하는 특정 신호를 통해 특정 메소드를 실행시킨다.

-> 발생한 신호를 시그널, 실행되는 메소드가 슬롯 이다.

def button_clicked():
    print("Clicked!")

app = QApplication(sys.argv)
window = QMainWindow()
button = QPushButton("Press Me!")

button.clicked.connect(button_clicked)
window.setCentralWidget(button)
window.show()
app.exec_()
class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.button = QPushButton("Press Me!")
        self.button.clicked.connect(self.button_clicked)
        self.setCentralWidget(self.button)

    def button_clicked(self):
        print("Clicked!")

app = QApplication(sys.argv)
window = MainWindow()
window.show()
app.exec_()

위의 예시에서 button_clicked가 함수이고 슬롯이다.

그리고 button.clicked 가 시그널이다.

시그널.connect(슬롯) 과 같은 형태로 실행된다.


if __name__ == "__main__":
    import numpy as np
    app = QApplication(sys.argv)

    x = np.linspace(0,1,50)

    y1 = np.cos(4*np.pi*x)
    y2 = np.cos(4*np.pi*x)*np.exp(-2*x)

    canvasWidget = FigureCanvas(Figure(figsize=(6,4)))
    ax = canvasWidget.figure.add_subplot(2,1,1)
    ax.plot(x,y1,'r-*',lw=1)
    ax.grid(True)
    ax.set_ylabel(r'$sin(4 \pi x)$')
    ax.axis([0,1,-1.5,1.5])

    ax = canvasWidget.figure.add_subplot(2,1,2)
    ax.plot(x,y2,'b--o',lw=1)
    ax.grid(True)
    ax.set_xlabel('x')
    ax.set_ylabel(r'$ e^{-2x} sin(4\pi x) $')
    ax.axis([0,1,-1.5,1.5])     

    canvasWidget.figure.tight_layout()

    canvasWidget.show()
    app.exec_()
class himatplot:
    def __init__(self):
        super().__init__()
        x = np.linspace(0,1,50)

        y1 = np.cos(4*np.pi*x)
        y2 = np.cos(4*np.pi*x)*np.exp(-2*x)

        canvasWidget = FigureCanvas(Figure(figsize=(6,4)))
        ax = canvasWidget.figure.add_subplot(2,1,1)
        ax.plot(x,y1,'r-*',lw=1)
        ax.grid(True)
        ax.set_ylabel(r'$sin(4 \pi x)$')
        ax.axis([0,1,-1.5,1.5])

        ax = canvasWidget.figure.add_subplot(2,1,2)
        ax.plot(x,y2,'b--o',lw=1)
        ax.grid(True)
        ax.set_xlabel('x')
        ax.set_ylabel(r'$ e^{-2x} sin(4\pi x) $')
        ax.axis([0,1,-1.5,1.5])  

        canvasWidget.figure.tight_layout()

        canvasWidget.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = himatplot()
    app.exec_()

마찬가지로 matplot의 일반적인 출력도 다음과 같이 class화가 가능하다.

profile
끊임없이 뭔가를 남기는 사람

0개의 댓글