Обработка сигналов в разных классах pyqt5
Существует класс Windowset, в котором есть окно с кнопкой btn. И второй класс MainWindow, в котором по нажатию кнопки btn должна выполнятся функция.
Вопрос в следующем, почему при обработке сигнала слот не обрабатывается и появляется ошибка: сигнал не имеет атрибута connect.
Большое спасибо за любые советы.
from PyQt5.QtCore import pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5 import QtWidgets
import sys
class Windowset(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
def initUI(self):
self.btn = QPushButton('Dialog', self)
self.btn.move(20, 20)
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Input dialog')
self.mysignal = pyqtSignal(str)
self.btn.clicked.connect(self.pers)
def pers(self):
self.mysignal.emit("Привет!!!")
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Input dialog')
self.ex1 = Windowset()
self.ex1.mysignal.connect(self.change_ikon)
@pyqtSlot(str)
def change(self):
print("a")
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Правильно делать так:
from PyQt5.QtCore import pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5 import QtWidgets
import sys
class Windowset(QtWidgets.QMainWindow):
mysignal = pyqtSignal(str) # <---
def __init__(self):
super().__init__()
self.initUI() # +++
def initUI(self):
self.btn = QPushButton('Dialog', self)
self.btn.move(20, 20)
self.setGeometry(610, 400, 290, 150)
self.setWindowTitle('Windowset')
# self.mysignal = pyqtSignal(str) # ---
self.btn.clicked.connect(self.pers)
def pers(self):
self.mysignal.emit("Привет!!!")
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Input dialog')
self.ex1 = Windowset()
self.ex1.mysignal.connect(self.change_ikon)
self.ex1.show() # +++
@pyqtSlot(str)
# def change(self): # ---
def change_ikon(self, text): # +++ text
print(f"a ?, --> {text}")
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_())
Если что-то не понятно, спросите.
