Передача сигнала между окнами

Имеется 2 окна, код для каждой создан в отдельных файлах.

В первом окне Window есть кнопка self.button

Во втором окне SecondWindow есть self.label_1, текст которой должен поменяться (методом def func(self)), про нажатии кнопки self.button из первого окна Window.

Сейчас я не понимаю, как во втором файле SecondWindow.py для self.button.clicked.connect назначить правильно метод.
Меня запутал класс MyBar(QWidget) из-за parent в def __init__(self, parent):

Код в первом файле Window.py:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class MyBar(QWidget):
    def __init__(self, parent):
        super(MyBar, self).__init__()
        self.parent = parent

        self.layout = QHBoxLayout(self)
        self.layout.setContentsMargins(0, 0, 10, 0)
        self.title = QLabel()
        self.button = QtWidgets.QPushButton('КНОПКА')
        self.button.setFixedSize(160, 25)

        self.title.setFixedHeight(32)
        self.title.setAlignment(Qt.AlignCenter)

        self.layout.addWidget(self.title)
        self.layout.addWidget(self.button)

        self.start = QPoint(0, 0)
        self.pressing = False

    def resizeEvent(self, QResizeEvent):
        super(MyBar, self).resizeEvent(QResizeEvent)
        self.title.setFixedWidth(self.parent.width())

    def mousePressEvent(self, event):
        self.start = self.mapToGlobal(event.pos())
        self.pressing = True

    def mouseMoveEvent(self, event):
        if self.pressing:
            self.end = self.mapToGlobal(event.pos())
            self.movement = self.end - self.start
            self.parent.setGeometry(self.mapToGlobal(self.movement).x(),
                                    self.mapToGlobal(self.movement).y(),
                                    self.parent.width(),
                                    self.parent.height())
            self.start = self.end

    def mouseReleaseEvent(self, QMouseEvent):
        self.pressing = False


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.Content = QtWidgets.QFrame(self)
        self.Content.setStyleSheet("background-color: grey;")
        self.Content.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.Content.setFrameShadow(QtWidgets.QFrame.Raised)
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.Content)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setSpacing(0)

        self.page_1 = QtWidgets.QWidget()

        self.horizontalLayout.addWidget(self.page_1)

        self.layout = QVBoxLayout(self)

        self.myBar = MyBar(self)  # +++

        self.layout.addWidget(self.myBar)  # +++

        self.layout.addWidget(self.Content, 1)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.setSpacing(0)

        self.setMinimumSize(400, 200)
        
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)  # +++
        self.show()

Код во втором файле SecondWindow.py:

from PyQt5.QtWidgets import QWidget, QFileDialog, QComboBox
from Window import MainWindow


class Ui_Form0(object):
    def setupUi0(self, Form0):
        Form0.setObjectName("Form0")
        Form0.setEnabled(True)
        Form0.setGeometry(QtCore.QRect(20, 100, 500, 300))
        Form0.setWindowOpacity(1.0)
        Form0.setToolTipDuration(-1)
        Form0.setStatusTip("")
        Form0.setStyleSheet("background-color: rgb(255, 255, 255);")

        self.retranslateUi(Form0)
        QtCore.QMetaObject.connectSlotsByName(Form0)

    def retranslateUi(self, Form0):
        _translate = QtCore.QCoreApplication.translate
        Form0.setWindowTitle(_translate("Form0", "Главное меню"))


class MenuWindow(QWidget, Ui_Form0):
    def __init__(self):
        super().__init__()
        self.label_1 = QtWidgets.QLabel('нажми на кнопку')
        self.layout = QtWidgets.QVBoxLayout(self)
        self.layout.addWidget(self.label_1)
        self.firstMainWindow = MainWindow()

    def func(self):
        self.label_1.setText('КНОПКА нажата')


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    ui0 = MenuWindow()
    ui0.show()
    sys.exit(app.exec_())```

Ответы (1 шт):

Автор решения: S. Nick

Попробуйте так:

q1299235_Window.py

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *

from q1299235_SecondWindow import MenuWindow                                # +++


class MyBar(QWidget):
    def __init__(self, parent):
        super(MyBar, self).__init__()
        self.parent = parent

        self.layout = QHBoxLayout(self)
        self.layout.setContentsMargins(0, 0, 10, 0)
        self.title = QLabel()
        
        self.button = QtWidgets.QPushButton('КНОПКА')
        self.button.setFixedSize(160, 25)

        self.title.setFixedHeight(32)
        self.title.setAlignment(Qt.AlignCenter)

        self.layout.addWidget(self.title)
        self.layout.addWidget(self.button)

        self.start = QPoint(0, 0)
        self.pressing = False

    def resizeEvent(self, QResizeEvent):
        super(MyBar, self).resizeEvent(QResizeEvent)
        self.title.setFixedWidth(self.parent.width())

    def mousePressEvent(self, event):
        self.start = self.mapToGlobal(event.pos())
        self.pressing = True

    def mouseMoveEvent(self, event):
        if self.pressing:
            self.end = self.mapToGlobal(event.pos())
            self.movement = self.end - self.start
            self.parent.setGeometry(self.mapToGlobal(self.movement).x(),
                                    self.mapToGlobal(self.movement).y(),
                                    self.parent.width(),
                                    self.parent.height())
            self.start = self.end

    def mouseReleaseEvent(self, QMouseEvent):
        self.pressing = False


class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()

        self.Content = QtWidgets.QFrame(self)
        self.Content.setStyleSheet("background-color: grey;")
        self.Content.setFrameShape(QtWidgets.QFrame.NoFrame)
        self.Content.setFrameShadow(QtWidgets.QFrame.Raised)
        self.horizontalLayout = QtWidgets.QHBoxLayout(self.Content)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setSpacing(0)

        self.page_1 = QtWidgets.QWidget()
        self.horizontalLayout.addWidget(self.page_1)

        self.layout = QVBoxLayout(self)

        self.myBar = MyBar(self)       
        self.layout.addWidget(self.myBar)

        self.layout.addWidget(self.Content, 1)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.layout.setSpacing(0)

        self.setMinimumSize(400, 200)
        
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)  
#        self.show()

        self.menuWindow = MenuWindow()                                        # +++
        self.myBar.button.clicked.connect(self.menuWindow.func)               # +++
        

if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

q1299235_SecondWindow.py

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *

#from Window import MainWindow


class Ui_Form0(object):
    def setupUi0(self, Form0):
        Form0.setObjectName("Form0")
        Form0.setEnabled(True)
        Form0.setGeometry(QtCore.QRect(20, 100, 500, 300))
        Form0.setWindowOpacity(1.0)
        Form0.setToolTipDuration(-1)
        Form0.setStatusTip("")
        Form0.setStyleSheet("background-color: rgb(255, 255, 255);")

        self.retranslateUi(Form0)
        QtCore.QMetaObject.connectSlotsByName(Form0)

    def retranslateUi(self, Form0):
        _translate = QtCore.QCoreApplication.translate
        Form0.setWindowTitle(_translate("Form0", "Главное меню"))


class MenuWindow(QWidget, Ui_Form0):
    def __init__(self):
        super().__init__()
        self.label_1 = QtWidgets.QLabel('нажми на кнопку')
        self.layout = QtWidgets.QVBoxLayout(self)
        self.layout.addWidget(self.label_1)
        
#        self.firstMainWindow = MainWindow()

    def func(self):
        self.setGeometry(QtCore.QRect(20, 100, 500, 300))
        self.label_1.setText('КНОПКА нажата')
        self.show()                                                         # +++


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui0 = MenuWindow()
    ui0.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка