Как обращаться к объектам родительской формы
Допустим, есть родительская форма — ParentClass(QMainWindow) и у этой формы имеется кнопка.
При нажатии на кнопку открывается дочерняя форма — ChildClass(QWidget), а у этой формы есть своя кнопка, с помощью которой можно как-нибудь взаимодействовать с ParentClass.
Например, при нажатии кнопки в ChildClass у ParentClass в QLabel будет появляться слово "ok".
Как реализовать отправку сигналов от дочерней формы к родительской?
Ответы (2 шт):
Данный ответ сформулирован искусственным интеллектом. Возможны ошибки!
Чтобы реализовать отправку сигналов из дочерней формы в родительскую форму в PyQt5, вы можете использовать метод pyqtSignal для определения сигнала в дочерней форме, а затем подключить сигнал к слоту в родительской форме с помощью метода подключения.
Вот пример того, как это можно реализовать:
from PyQt5.QtCore import pyqtSignal, QObject
from PyQt5.QtWidgets import QWidget, QPushButton, QLabel, QApplication
class ChildClass(QWidget):
# Define a signal that will be emitted when the button is clicked
buttonClicked = pyqtSignal()
def __init__(self):
super().__init__()
# Create a button and connect its clicked signal to the buttonClicked signal
button = QPushButton("Click me", self)
button.clicked.connect(self.buttonClicked.emit)
class ParentClass(QMainWindow):
def __init__(self):
super().__init__()
# Create a child form and a label
self.child = ChildClass()
self.label = QLabel("", self)
# Connect the buttonClicked signal from the child form to the updateLabel slot
self.child.buttonClicked.connect(self.updateLabel)
def updateLabel(self):
# Update the label when the buttonClicked signal is emitted
self.label.setText("ok")
if __name__ == '__main__':
app = QApplication([])
w = ParentClass()
w.show()
app.exec_()
В этом примере сигнал buttonClicked определен в ChildClass и запускается при нажатии кнопки. Затем сигнал buttonClicked подключается к слоту updateLabel в ParentClass, который обновляет метку при запуске сигнала.
Когда вы запустите этот код и нажмете кнопку в дочерней форме, метка в родительской форме будет обновлена словом «ok».
Как вариант
from PyQt5.QtCore import pyqtSignal, QObject
from PyQt5.QtWidgets import QWidget, QPushButton, QLabel, \
QApplication, QMainWindow, QVBoxLayout, QLineEdit
class ChildClass(QWidget):
# Define a signal that will be emitted when the button is clicked
buttonClicked = pyqtSignal()
def __init__(self):
super().__init__()
self.lineEdit = QLineEdit()
# Create a button and connect its clicked signal to the buttonClicked signal
button = QPushButton("Click me", self)
button.clicked.connect(self.buttonClicked.emit)
self.layout = QVBoxLayout(self)
self.layout.addWidget(self.lineEdit)
self.layout.addWidget(button)
class ParentClass(QMainWindow):
def __init__(self):
super().__init__()
self.centralwidget = QWidget()
self.setCentralWidget(self.centralwidget)
self.label = QLabel()
self.pushButton = QPushButton("Click me", self)
self.pushButton.clicked.connect(self.button_clicked)
self.layout = QVBoxLayout(self.centralwidget)
self.layout.addWidget(self.label)
self.layout.addWidget(self.pushButton)
# Create a child form and a label
self.child = ChildClass()
# Connect the buttonClicked signal from the child form to the updateLabel slot
self.child.buttonClicked.connect(self.updateLabel)
def button_clicked(self):
self.child.show()
def updateLabel(self):
# Update the label when the buttonClicked signal is emitted
self.label.setText(self.child.lineEdit.text())
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
w = ParentClass()
w.resize(300, 400)
w.show()
sys.exit(app.exec_())
