【问题标题】:change QMainWindow PyQt5 after pressed button按下按钮后更改 QMainWindow PyQt5
【发布时间】:2018-01-05 04:01:24
【问题描述】:

我已经用 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文件吗?

【问题讨论】:

    标签: python pyqt pyqt5 qt-designer qmainwindow


    【解决方案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_())
    

    【讨论】:

    • 非常感谢。我尝试过的方法真的很有帮助,也更容易
    猜你喜欢
    • 2011-06-29
    • 2020-04-20
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2019-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多