Приложение PyQt аварийно завершает работу при повторном вызове сообщения об ошибке - PullRequest
0 голосов
/ 29 апреля 2018

Контекст: Я создаю графический интерфейс с использованием QtDesigner и PyCharm. У меня возникает проблема, когда главное окно (win1) вызывает второе окно (win2) через QPushButton, а затем открывает сообщение об ошибке из-за отсутствия ввода пользователя. Я использую внешний файл (main.py) для обработки логики и событий всех окон, а не для редактирования кода, сгенерированного QtDesigner.

Проблема: Как у меня все настроено, пользователь должен выбрать опцию в поле со списком, исходя из выбора пользователя, приложение запускает либо win2, либо win3

Пользователь не выбирает никакой опции из comboBox -> Сообщение об ошибке
Пользователь выбирает вариант 1 -> win2 открывается, win1 закрывается
Пользователь выбирает вариант 2 -> win3 открывается, win1 закрывается
Проблема возникает после того, как пользователь выходит из win 2/3 и возвращается к win1
Пользователь выбирает вариант 1/2 -> открывается правильное окно, без проблем
Пользователь не выбирает никакой опции -> сообщение об ошибке -> пользователь закрывает ошибку сообщение -> сбой (или внезапный выход из приложения)
Примечание: Сбой не выдает ошибок / предупреждений

Вот код, который я использую для обработки открытия / закрытия:

class win1(QtGui.QMainWindow, pg1.Ui_MainWindow):
    def __init__(self, parent=None):
        super(win1, self).__init__(parent)
        self.setupUi(self)
        self.btn1.clicked.connect(self.checkuserselection)
        self.addnew = win2(self)

    def checkuserselection(self):
        user_str = str(self.comboBox.currentText())
        if user_str == "Select Option":
            self.errMsg()
        elif user_str == "Option 1":
            self.runaddnew("Window title for option 1")
        else:
            self.runaddnew("window title for option 2")

    def runaddnew(self, title):
        self.addnew.setWindowTitle(title)
        self.addnew.show()
        self.hide()

    @staticmethod
    def errMsg():
        w = QtGui.QMessageBox()
        QtGui.QMessageBox.critical(w, "No Option Selected!")

код для win2:

class win2(QtGui.QMainWindow, pg2.Ui_MainWindow):
    def __init__(self, parent=None):
        super(win2, self).__init__(parent)
        self.setupUi(self)
        self.actionExit.triggered.connect(self.closeWindow)

    def closeWindow(self):
        self.close()
        w = win1(self)
        w.show()

Пользователь может получить сообщение об ошибке много раз без внезапного завершения работы приложения, если они не открыли одно из других окон. Это заставляет меня думать, что проблема заключается в методе closeWindow в win2. Мои знания в python / pyQt ограничены, поэтому я не знаю, действительно ли это та проблема.

1 Ответ

0 голосов
/ 29 апреля 2018

Благодаря @ekhumoro я публикую ответ, который сработал здесь, на случай, если у кого-то еще возникнет эта проблема.
В коде для win2:

def closeWindow(self):
    self.parent().show()
    self.close()

Это работает, потому что win1 передал себя в win2 при создании win2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...