python - 按下按钮后更改 QMainWindow PyQt5

标签 python pyqt pyqt5 qt-designer qmainwindow

我已经使用 Qt Designer 生成了 UI:

像这样

我使用了带有以下 python 代码的 .ui 文件:

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_())

当按下下一个按钮时,我尝试通过创建一个新类并使用不同的 ui 文件来更改窗口。

我找到了这个stackoverflow post这是一个类似的问题,但代码是这篇文章不使用 .ui,并且我没有设法拥有带有 .ui 文件的工作代码。当我不使用我的 ui 文件时,我成功地获得了一个新窗口。

有人知道我该如何处理这个问题吗?不建议使用.ui 文件吗?

最佳答案

我提出的解决方案与我之前的答案类似,目标是更改图形部分,因此我们将使用生成该部分的函数 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_())

关于python - 按下按钮后更改 QMainWindow PyQt5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45384407/

相关文章:

Python:rsync 排除在脚本中不起作用,在 bash shell 中起作用

python - 如何在主进程退出后保持子进程运行?

python - PyQt 对 QTreeWidgetItem 的有效性检查

javascript - Python - 在两个浏览器之间传输 session

python - 编辑单元格时pyqt5 qtablewidget单元格背景

pyqt5 - 使用 Pyinstaller 打包 - PyQt5 setStyle 被忽略

python - 在类初始化器中使用 super 的目的是什么?

python - 当它的值改变时,python 中的不可变对象(immutable对象)会发生什么?

python - 如何迭代使用 QStandardItemModel 创建的动态创建的复选框列表?

python - PyQt5 styleSheet 动画