Reputation: 3
I'd like to enter some text to one window, then see it at another window, using pyqtSignal, but, unfortunately, it does not work. I'm not sure whether I do everything right to exchange data between two forms. Here is my attempt:
import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
from PyQt5.QtWidgets import QMainWindow, QTextBrowser, QPlainTextEdit
class FirstForm(QMainWindow):
Signal_OneParameter = pyqtSignal(str)
def __init__(self):
super().__init__()
self.initUI()
def buildDependenciesChanged(self):
self.a = self.textboxValue.toPlainText()
return self.a
def initUI(self):
self.setGeometry(300, 300, 500, 500)
self.setWindowTitle('Html editor')
self.textboxValue = QPlainTextEdit(self)
self.a = self.textboxValue.textChanged.connect(self.buildDependenciesChanged)
self.btn = QPushButton('Ok', self)
self.btn.move(100, 100)
self.btn.resize(self.btn.sizeHint())
self.btn.clicked.connect(self.open_second_form)
def open_second_form(self):
date_str = self.a
self.Signal_OneParameter.emit(date_str)
self.second_form = SecondForm(self)
self.second_form.show()
class SecondForm(QWidget):
def __init__(self, *args):
super().__init__()
self.initUI(args)
def initUI(self, args):
self.setGeometry(300, 300, 500, 500)
self.setWindowTitle('Second Form')
self.Signal_OneParameter.connect(self.deal_emit_slot)
def deal_emit_slot(self, dateStr):
self.label = QTextBrowser(self)
self.label.setHtml(dateStr)
if __name__ == '__main__':
app = QApplication(sys.argv)
form = FirstForm()
form.show()
sys.exit(app.exec())
Upvotes: 0
Views: 110
Reputation: 244132
It seems that the OP does not understand correctly the logic of signals and slots. The signals send the information to the slots that are connected, and every time you want to send information then the signal must be emitted.
import sys
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import (
QApplication,
QMainWindow,
QPlainTextEdit,
QPushButton,
QTextBrowser,
QVBoxLayout,
QWidget,
)
class FirstForm(QMainWindow):
Signal_OneParameter = pyqtSignal(str)
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def buildDependenciesChanged(self):
self.Signal_OneParameter.emit(self.textboxValue.toPlainText())
def initUI(self):
self.setGeometry(300, 300, 500, 500)
self.setWindowTitle("Html editor")
self.textboxValue = QPlainTextEdit(self)
self.textboxValue.textChanged.connect(self.buildDependenciesChanged)
self.btn = QPushButton("Ok", self)
self.btn.move(100, 100)
self.btn.resize(self.btn.sizeHint())
self.btn.clicked.connect(self.open_second_form)
def open_second_form(self):
self.second_form = SecondForm()
self.Signal_OneParameter.connect(self.second_form.deal_emit_slot)
self.second_form.show()
class SecondForm(QWidget):
def __init__(self, parent=None):
super().__init__(parent)
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 500, 500)
self.setWindowTitle("Second Form")
lay = QVBoxLayout(self)
self.label = QTextBrowser()
lay.addWidget(self.label)
def deal_emit_slot(self, dateStr):
self.label.setHtml(dateStr)
if __name__ == "__main__":
app = QApplication(sys.argv)
form = FirstForm()
form.show()
sys.exit(app.exec())
Upvotes: 1