2017-07-29 95 views
0

我已生成我使用Qt Designer用戶界面:變化的QMainWindow PyQt5按下按鈕後

像我已經使用了下面的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文件?

回答

0

我提出的解決方案與我以前的答案類似,目標是更改圖形部分,因此我們將使用生成該部分的函數setupUI()。

當我們按下一個按鈕,你必須改變它與該功能。

Ui_MainWindow, QtBaseClass = uic.loadUiType("vault.ui") 
Ui_Credentials, QtBaseClass = 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_()) 
+0

非常感謝。這是我嘗試過的非常有用和容易 – Florian