Coding Challenge/오늘의 코드
pyqt 창끼리 데이터 전달
인생마린
2020. 9. 12. 01:26
반응형
파이썬 pyqtSignal을 이용하여 데이터를 전달해보겠습니다.
실행 미리 보기
코드설명
class NewWindw(QtWidgets.QWidget):
command = QtCore.pyqtSignal(str)
QtCore.pyatSignal(str)은 str형태의 데이터를 전달하는 통로라는것을 의미합니다. 다른 자료형을 전달할때는 바꿔주면 됩니다.
self.inputbox.returnPressed.connect(self.sendCommand)
@QtCore.pyqtSlot()
def sendCommand(self):
msg = self.inputbox.text()
self.command.emit(msg)
self.inputbox.setText("")
데이터를 보내주는 함수입니다. command.emit(msg)
emit함수를 통해 메세지(str)을 전달해줍니다.
그리고 inputbox를 비워줍니다. 해당함수는 맨위줄 코드에 의해 inputbox에서 엔터를 누를경우 호출됩니다
def display(self):
self.w = NewWindw()
self.w.command.connect(self.anyfunction)
@QtCore.pyqtSlot(str)
def anyfunction(self, msg):
self.label.setText(msg)
display함수에서 NewWindow를 키고, 해당 윈도우의 signal인 command와 anyfunction을 connect해줍니다.
이렇게 되면 command.emit이 호출될때마다 anyfunction함수가 호출됩니다.
메세지를 받기 위해 anyfunction에는 매개변수 msg를 써줍니다.
코드
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Window(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.label = QtWidgets.QLabel("text", self)
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.resize(300, 100)
self.display()
self.show()
def display(self):
self.w = NewWindw()
self.w.command.connect(self.anyfunction)
def closeEvent(self, event):
self.w.close()
@QtCore.pyqtSlot(str)
def anyfunction(self, msg):
self.label.setText(msg)
class NewWindw(QtWidgets.QWidget):
command = QtCore.pyqtSignal(str)
def __init__(self):
super().__init__()
self.inputbox = QtWidgets.QLineEdit(self)
self.inputbox.resize(500, 100)
self.inputbox.returnPressed.connect(self.sendCommand)
self.show()
@QtCore.pyqtSlot()
def sendCommand(self):
msg = self.inputbox.text()
self.command.emit(msg)
self.inputbox.setText("")
app = QtWidgets.QApplication(sys.argv)
window = Window()
sys.exit(app.exec())
반응형