2017-02-25 254 views
0

我需要在我的MainWindow中實例化2個Ui。此代碼的工作,如果我只實例1個UI:PyQt5如何實例化主Ui中的多個UI

self.loginWindow = QtWidgets.QDialog(MainWindow) 
    self.ui = Ui_LogInWindow() 
    self.ui.setupUi(self.loginWindow) 
    self.loginWindow.setModal(True) 
    self.loginWindow.show() 

然而,當我嘗試這樣做對我的其他的用戶界面,它產生錯誤:

self.loginWindow = QtWidgets.QDialog(MainWindow) 
    self.ui = Ui_LogInWindow() 
    self.ui.setupUi(self.loginWindow) 
    self.loginWindow.setModal(True) 
    self.loginWindow.show() 


    self.profileWindow = QtWidgets.QDialog(MainWindow) 
    self.ui = Ui_ProfileWindow() 
    self.ui.setupUi(self.profileWindow) 
    self.profileWindow.setModal(True) 
    #self.profileWindow.show() 

的事情是,我需要的部件上均爲Ui_LogInWindowUi_ProfileWindow在我的主窗口。如果我無法正確實例化這兩者,我不會如何使它工作。我是PyQt和Python的新手,這就是爲什麼我不太瞭解語法。幫助將不勝感激。謝謝!

+0

我不太明白你想要什麼。你能提供一個最小的工作例子嗎?或者一張圖片,也許? – mFoxRU

+0

我的意思是,我如何實例化兩個或更多的用戶界面內我的主要用戶界面。我不明白在實例化中父母和孩子關係的概念,這就是爲什麼上面顯示的代碼的第二部分不起作用;並顯示第一個代碼。 – harthart

+0

所以你想在一個窗口上同時顯示2個不同的用戶界面?你期望它看起來如何:並排,相互重疊?或者你想要兩個獨立的窗口可以獨立顯示? – mFoxRU

回答

1

問題是你在類的一個實例中設置了兩個UI。而不是那麼做,你最好爲每個窗口創建兩個獨立的類。

雙窗口應用程序的一個小例子。

import sys 

from PyQt5 import QtWidgets 


class App(QtWidgets.QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.setGeometry(100, 100, 200, 100) 
     self.button = QtWidgets.QPushButton('Wow such button', self) 
     self.button.move(40, 20) 


class App2(QtWidgets.QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.setGeometry(400, 100, 200, 200) 
     self.editor = QtWidgets.QTextEdit('Wow such text', self) 
     self.editor.setGeometry(20, 20, 160, 160) 

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    gui = App() 
    gui2 = App2() 
    gui.show() 
    gui2.show() 
    app.exec_() 

請注意,沒有必要一次創建所有窗口。我稍微修改了上面的例子,現在只有第一個窗口在啓動時顯示。您可以使用按鈕切換第二個窗口的可見性。

import sys 

from PyQt5 import QtWidgets 


class App(QtWidgets.QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.setGeometry(100, 100, 200, 100) 
     self.button = QtWidgets.QPushButton('Toggle second window', self) 
     self.button.setGeometry(20, 20, 160, 30) 

     self.app2 = App2() 
     self.button.clicked.connect(self.toggle_app2) 

    def toggle_app2(self): 
     if self.app2.isHidden(): 
      self.app2.show() 
     else: 
      self.app2.hide() 


class App2(QtWidgets.QMainWindow): 
    def __init__(self): 
     super().__init__() 
     self.setGeometry(400, 100, 200, 200) 
     self.editor = QtWidgets.QTextEdit('Wow such text', self) 
     self.editor.setGeometry(20, 20, 160, 160) 

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    gui = App() 
    gui.show() 
    app.exec_() 

希望將指向你在正確的方向

+0

感謝您的答覆。但是,我有3 ** .py **文件,其中包含我的** U **。 1用於我的主窗口(這將調用兩個ui文件),另外兩個用於1。我如何實施你剛纔告訴我的? 根據我對你的回答的理解,其他兩個用戶界面是在主窗口內製作的;這不是我的情況。 非常感謝。對你的榮譽 – harthart

+0

我如何實現你剛纔所說的,當我需要導入我的其他2個用戶界面,所以我可以使用他們的內部部件?此外,我的2個用戶都可以在兩個不同的.py文件中找到。我希望這消除了我的擔憂。非常感謝你 – harthart

+0

嗯,只需在mainwindow文件中導入兩個UI,並在mainwindow的'__init__'中創建它們的實例。之後,您將能夠訪問他們的小部件。 – mFoxRU