在Qt中更新子窗口小部件

时间:2015-11-10 18:22:35

标签: python qt user-interface pyqt

我有一个包含以下类的简单项目

  1. 类MainWindow(QMainWindow)
  2. class Home(QWidget)
  3. 班级登录(QWidget)
  4. 我想要的就是能够嵌套QWidget类(使它们成为QMainWindow的子类)并在MainWindow中显示它们。在我在MainWindow中调用QWidgets后,我无法找出如何使QWidgets“显示”。

    代码如下:

    import sys
    from gui.MainWindow import Ui_MainWindow
    from gui.home import Ui_Home
    from gui.login import Ui_Login
    from PyQt4.QtGui import QMainWindow, QApplication, QWidget
    
    class Home(QWidget, Ui_Home):
        def __init__(self):
            QWidget.__init__(self)
            self.setupUi(self)
    
    class Login(QWidget, Ui_Login):
        def __init__(self):
            QWidget.__init__(self)
            self.setupUi(self)
    
    class MainWindow(QMainWindow,Ui_MainWindow):
        def __init__(self):
            QMainWindow.__init__(self)
            self.setupUi(self)
    
            #INSERT pushButton.click to go to HOME here
            #INSERT pushButton.click to go to LOGIN here
    
        def setHome(self):    
            self.label_Screen.setText("HOME")
            self.mainwidget = Home()
            #NEEDS SOMETHING HERE
    
        def setLogin(self):    
            self.label_Screen.setText("LOGIN")
            self.mainwidget = Login()
            #NEEDS SOMETHING HERE
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        Main = MainWindow()
        Main.show()
        sys.exit(app.exec_())
    

    我想我只需要标记“#NEEDS SOMETHING HERE”的内容,但我不确定是什么!

    干杯!

    已解决:感谢kh25

    只需向QMainWindow添加布局并将setHome更改为:

    def setHome(self):    
        self.label_Screen.setText("HOME")
        self.currentScreen = Home()
        self.layout.addWidget(self.currentScreen)
        self.setLayout(self.layout)
    

    也应该对setLogin方法进行等效。

1 个答案:

答案 0 :(得分:1)

您需要先创建布局并将小部件添加到此布局中。有各种类型的布局。在这里阅读:

http://doc.qt.io/qt-4.8/layout.html

对于像你这样的简单案例,我建议使用QHBoxLayout或QVBoxLayout。

声明此布局。在每个Login和Home小部件的布局上调用addWidget(),然后在QMainWindow上调用setLayout()。