изменить QMainWindow PyQt5 после нажатия кнопки

Я создал свой пользовательский интерфейс с помощью Qt Designer:

нравится

Я использовал файл .ui со следующим кодом Python:

Ui_MainWindow, QtBaseClass = uic.loadUiType("vault.ui")
Ui_Credentials, QtBaseClass = uic.loadUiType("credentials.ui")

class Credentials(QMainWindow):
    def __init__(self):
        super(Credentials, self).__init__()
        self.ui = Ui_Credentials()
        self.ui.setupUi(self)


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        self.ui.load.clicked.connect(self.loadVault)
        self.ui.next.clicked.connect(self.next)

        self.controller = CLI(....)
        self.loadVault()

    def loadVault(self):
        self.ui.vault.clear()
        vaults = self.controller.listVaults()
        for vault in vaults:
            item = QListWidgetItem(vault)
            self.ui.vault.addItem(item)

    def next(self):

        print(self.ui.vault.currentItem().text())
        window = Credentials()
        window.show()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())

Я попытался изменить окно при нажатии следующей кнопки, создав новый класс и используя другой файл пользовательского интерфейса.

Я нашел это сообщение stackoverflow, где это аналогичная проблема, но код в этом посте не использует .ui, и мне не удалось получить рабочий код с .ui файлом. Мне удалось открыть новое окно, когда я не использую свой файл пользовательского интерфейса.

Кто-нибудь знает, как я могу с этим справиться? Не рекомендуется использовать файл .ui?


person Florian    schedule 29.07.2017    source источник


Ответы (1)


Предлагаемое мной решение аналогично моему предыдущему ответу, цель состоит в том, чтобы изменить графическую часть, поэтому мы будем использовать функцию setupUI (), которая генерирует эту часть.

Когда мы нажимаем следующую кнопку, вы должны снова изменить ее с помощью этой функции.

Ui_MainWindow, _ = uic.loadUiType("vault.ui")
Ui_Credentials, _ = uic.loadUiType("credentials.ui")


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.startMainWindow()

    def startMainWindow(self):
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.next.clicked.connect(self.startCredentials)

    def startCredentials(self):
        self.ui = Ui_Credentials()
        self.ui.setupUi(self)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec_())
person eyllanesc    schedule 29.07.2017
comment
Большое тебе спасибо. Было действительно полезно и проще то, что я пробовал - person Florian; 29.07.2017