Найти - Пользователи
Полная версия: Не закрывается окно
Начало » GUI » Не закрывается окно
1
Dlod
Всем привет! Прошу не ругать не так давно начал изучать 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
Разобрался с окном которое не закрывалось. Но во теперь не могу понять почему не меняется размер этого окна когда дергаю 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()
Rodegast
1) QMainWindow должен быть только 1, для диалогов используй QDialog и никогда для создания окон не используй QWidget
2) Нельзя каждый раз переустанавливать виджеты! self.setCentralWidget должен вызываться только 1 раз из конструктора.
3) Функция main лишняя.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB