Форум сайта python.su
Всем привет! Прошу не ругать не так давно начал изучать python и qt.
есть два окна сделанные в qtdesiner сначала вызываю одно окно из него требуется вызвать второе окно. при закрытии второго окна через кнопку отмена должно открыться первое, оно открывается но при этом остается висеть пустая форма от второго окна. как победить эту форму?
import sys import mainForm, regSub from PyQt5 import QtCore, QtGui, QtWidgets class startWin(QtWidgets.QMainWindow): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.ui = mainForm.Ui_MainWindow() self.ui.setupUi(self) self.regSubButton = regWin() self.ui.pushButton.clicked.connect(self.regSubButtonEvent) def closeEvent(self, e): result = QtWidgets.QMessageBox.question(self,"Confirm Dialog", "Вы действительно хотите выйти?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) if result == QtWidgets.QMessageBox.Yes: e.accept() else: e.ignore() def regSubButtonEvent(self): self.setCentralWidget(self.regSubButton) self.resize(400,250) class regWin(QtWidgets.QMainWindow): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.ui2 = regSub.Ui_MainWindow() self.ui2.setupUi(self) self.ui2.pushButton_2.clicked.connect(self.hide) def regCancelButtonEvent(self): self.regCancelButton = startWin() self.regCancelButton.show() def closeEvent(self, e): result = QtWidgets.QMessageBox.question(self,"Confirm Dialog", "Вы действительно хотите выйти?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) if result == QtWidgets.QMessageBox.Yes: e.accept() else: e.ignore() def main(): app = QtWidgets.QApplication(sys.argv) startapp = startWin() startapp.show() sys.exit(app.exec_()) if __name__ == "__main__": main()
Отредактировано Dlod (Март 6, 2016 09:40:58)
Офлайн
Разобрался с окном которое не закрывалось. Но во теперь не могу понять почему не меняется размер этого окна когда дергаю resize
import sys import mainForm, regSub from PyQt5 import QtCore, QtGui, QtWidgets class startWin(QtWidgets.QMainWindow): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.ui = mainForm.Ui_MainWindow() self.ui.setupUi(self) self.regSubButton = regWin() self.ui.pushButton.clicked.connect(self.regSubButtonEvent) def closeEvent(self, e): result = QtWidgets.QMessageBox.question(self,"Confirm Dialog", "Вы действительно хотите выйти?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) if result == QtWidgets.QMessageBox.Yes: e.accept() else: e.ignore() def regSubButtonEvent(self): self.setCentralWidget(self.regSubButton) self.resize(400,250) class regWin(QtWidgets.QMainWindow): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent) self.ui2 = regSub.Ui_MainWindow() self.ui2.setupUi(self) self.ui2.pushButton_2.clicked.connect(self.regCancelButtonEvent) self.ui2.pushButton.clicked.connect(self.regAddSub) def regCancelButtonEvent(self): self.regCancelButton = startWin() self.setCentralWidget(self.regCancelButton) self.resize(400, 400) def regAddSub(self): QtWidgets.QMessageBox.question(self,"Confirm Dialog", "Абонент добавлен", QtWidgets.QMessageBox.Yes) self.regCancelButton = startWin() self.setCentralWidget(self.regCancelButton) self.resize(400,450) def closeEvent(self, e): result = QtWidgets.QMessageBox.question(self,"Confirm Dialog", "Вы действительно хотите выйти?", QtWidgets.QMessageBox.Yes | QtWidgets.QMessageBox.No, QtWidgets.QMessageBox.No) if result == QtWidgets.QMessageBox.Yes: e.accept() else: e.ignore() def main(): app = QtWidgets.QApplication(sys.argv) startapp = startWin() startapp.show() sys.exit(app.exec_()) if __name__ == "__main__": main()
Офлайн
1) QMainWindow должен быть только 1, для диалогов используй QDialog и никогда для создания окон не используй QWidget
2) Нельзя каждый раз переустанавливать виджеты! self.setCentralWidget должен вызываться только 1 раз из конструктора.
3) Функция main лишняя.
Офлайн