"파이썬을 이용한 시스템 트레이딩" (https://wikidocs.net/book/110) 문서를 따라하던 중에 약간의 오류가 발생하였다.

확인해 보니 , 해당 자료는 PyQt4 기준인데, 내 PC의 Anaconda는 PyQt5 가 인스톨되어 있었다. 
PyQt5에는 이벤트 처리 시 connect 함수가 다르게 호출되어야 한다. 

PyQt4 에서는 QMainWindow 를 상속받아서 self.connect 함수의 인자에 이벤트를 발생 시킨 객체명, 발생 이벤트명, 이벤트 처리기에서 수행 함수명을 기재한다.  self.connect(self.pushButton, SIGNAL("clicked()"),self.btn_clicked) 와 같이 호출한다. 
PyQt5 에서는 객체의 이벤트에서 connect 함수를 호출하고 인자에 이벤트 처리기에서 수행하는 함수를 기재한다. 
self.pushButton.clicked.connect(self.btn_clicked) 와 같이 호출한다. 

아래는 PyQt4 의 예제임. 
import sys

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import uic


form_class = uic.loadUiType("main_window.ui")[0]

class MyWindow(QMainWindow , form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        #pushButton은 이벤트를 발생시킨 QPushButton 객체명,
        #SIGNAL("clicked")는 QPushbutton의 클릭 함수,
        #self.btn_clicked 는 QPushbutton 클릭시 Event 처리기에서 수행하는 함수
        self.connect(self.pushButton, SIGNAL("clicked()"),self.btn_clicked)

    def btn_clicked(self):
        QMessageBox.about(self,"message","clicked")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    app.exec_()


아래는 PyQt5 의 예제임. 
import sys

from PyQt5.QtCore import *
from PyQt5.QtGui import *
import signal
from PyQt5.QtWidgets import *
from PyQt5 import uic


form_class = uic.loadUiType("main_window.ui")[0]

class MyWindow(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        #객체의 이벤트에서 connect 함수를 호출하고 인자에 이벤트 처리기에서 수  행하는 함수를 기재한다. 
        self.pushButton.clicked.connect(self.btn_clicked)

    def btn_clicked(self):
        QMessageBox.about(self"message""clicked")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    myWindow = MyWindow()
    myWindow.show()
    app.exec_()

+ Recent posts