from PyQt5 import QtCore,QtWidgets
import sys
class childForm:
def __init__(self,mainForm):
self.form = QtWidgets.QWidget(mainForm,QtCore.Qt.Window)
# self.form.setWindowModality(QtCore.Qt.WindowModal)
self.form.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
self.form.setWindowTitle("Дочернее окно")
self.form.resize(300, 70)
btnClose = QtWidgets.QPushButton("&Закрыть дочернее окно")
vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(btnClose)
self.form.setLayout(vbox)
btnClose.clicked.connect(self.close_it_right_now)
self.form.show()
def close_it_right_now(self):
self.form.close()
class MainForm:
def __init__(self,app):
self.form = QtWidgets.QWidget()
self.form.setWindowTitle("Первая программа на PyQt")
self.form.resize(500, 500)
label = QtWidgets.QLabel("<center>Привет, мир!</center>")
btnDock = QtWidgets.QPushButton("Открыть &дочернее окно")
btnQuit = QtWidgets.QPushButton("&Закрыть программу")
vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(label)
vbox.addWidget(btnDock)
vbox.addWidget(btnQuit)
self.form.setLayout(vbox)
btnDock.clicked.connect(self.child_window_show)
btnQuit.clicked.connect(app.quit)
self.form.show()
def child_window_show(self):
child_form=childForm(self.form)
def main():
app = QtWidgets.QApplication(sys.argv)
main_form=MainForm(app)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
self
и self.form
ссылаются на разные объекты и соответственно не видят друг друга self - <class '__main__.childForm'>
self.form - <class 'PyQt5.QtWidgets.QWidget'>
from PyQt5 import QtCore, QtWidgets
import sys
class child_form(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.setWindowFlags(QtCore.Qt.Window)
self.setWindowModality(QtCore.Qt.WindowModal)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose, True)
self.setWindowTitle("Дочернее окно")
self.resize(300, 70)
btn_close = QtWidgets.QPushButton("&Закрыть дочернее окно")
btn_close.clicked.connect(self.on_btn_close)
vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(btn_close)
self.setLayout(vbox)
def show_window(self):
self.show()
def on_btn_close(self):
self.close()
class main_form(QtWidgets.QWidget):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.setWindowTitle("Первая программа на PyQt")
self.resize(500, 500)
label = QtWidgets.QLabel("<center>Привет, мир!</center>")
btn_modal = QtWidgets.QPushButton("Открыть &дочернее окно")
btn_close = QtWidgets.QPushButton("&Закрыть программу")
vbox = QtWidgets.QVBoxLayout()
vbox.addWidget(label)
vbox.addWidget(btn_modal)
vbox.addWidget(btn_close)
self.setLayout(vbox)
btn_modal.clicked.connect(self.on_btn_modal)
btn_close.clicked.connect(QtWidgets.qApp.quit)
def show_window(self):
self.show()
def on_btn_modal(self):
child = child_form(self)
child.show_window()
def main():
app = QtWidgets.QApplication(sys.argv)
form = main_form()
form.show_window()
sys.exit(app.exec_())
if __name__ == '__main__':
main()