我有一个包含以下类的简单项目
我想要的就是能够嵌套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方法进行等效。
答案 0 :(得分:1)
您需要先创建布局并将小部件添加到此布局中。有各种类型的布局。在这里阅读:
http://doc.qt.io/qt-4.8/layout.html
对于像你这样的简单案例,我建议使用QHBoxLayout或QVBoxLayout。
声明此布局。在每个Login和Home小部件的布局上调用addWidget(),然后在QMainWindow上调用setLayout()。