如何显示stackwidget?

时间:2015-07-03 03:02:30

标签: python pyqt

我试图使用stackWidget来显示不同的小部件 但是当我按下listWdget上的项目时,下面的stackWidget将不会显示 这是我的代码,我不知道哪里出错了。

#!/usr/bin/python

# music_1.py

import sys
from PyQt4 import QtGui, QtCore
from music_ui import Ui_Form 
class music(QtGui.QDialog): 
    def __init__(self, parent=None): 
        QtGui.QDialog.__init__(self, parent) 
        self.ui = Ui_Form() 
        self.ui.setupUi(self)

        self.ui.listWidget.insertItem(0,("Warm"))  
        self.ui.listWidget.insertItem(1,("Funny"))  
        self.ui.listWidget.insertItem(2,("Terror"))

        self.ui.stackedWidget=QtGui.QStackedWidget() 
        warm=Warm()  
        funny=Funny()  
        terror=Terror()

        self.ui.stackedWidget.addWidget(warm)  
        self.ui.stackedWidget.addWidget(funny)  
        self.ui.stackedWidget.addWidget(terror)  

        self.connect(self.ui.listWidget,QtCore.SIGNAL("currentRowChanged(int)"),self.ui.stackedWidget,QtCore.SLOT("setCurrentIndex(int)"))  

class Warm(QtGui.QWidget):  
    def __init__(self,parent=None):  
        super(Warm,self).__init__(parent)
        w1=QtGui.QPushButton("w1")  
        w2=QtGui.QPushButton("w2")
        buttonLayout=QtGui.QHBoxLayout()  
        buttonLayout.addStretch(1)  
        buttonLayout.addWidget(w1)  
        buttonLayout.addWidget(w2)

class Funny(QtGui.QWidget):  
    def __init__(self,parent=None):  
        super(Funny,self).__init__(parent)
        f1=QtGui.QPushButton("f1")  
        f2=QtGui.QPushButton("f2")
        f3=QtGui.QPushButton("f3")
        buttonLayout=QtGui.QHBoxLayout()  
        buttonLayout.addStretch(1)  
        buttonLayout.addWidget(f1)  
        buttonLayout.addWidget(f2)
        buttonLayout.addWidget(f3)

class Terror(QtGui.QWidget):  
    def __init__(self,parent=None):  
        super(Terror,self).__init__(parent)
        t1=QtGui.QPushButton("t1")  
        t2=QtGui.QPushButton("t2")      
        buttonLayout=QtGui.QHBoxLayout()  
        buttonLayout.addStretch(1)  
        buttonLayout.addWidget(t1)  
        buttonLayout.addWidget(t2)


if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    myapp = music() 
    myapp.show() 
    sys.exit(app.exec_())

1 个答案:

答案 0 :(得分:1)

我从未使用过UI文件,但这是我的猜测:

self.ui.stackedWidget=QtGui.QStackedWidget()

在这里创建一个QStackedWidget,并将其分配给该类。问题是它被添加到正在显示的UI,而只是添加到Ui_Form的实例。你要做的是:

  • 在UI Designer中添加QStackedWidget并删除上面的行 或
  • 将QStackedWidget添加到您的某个布局

可以这样做:

self.ui.mySuperCoolLayout.addWidget(self.ui.stackedWidget)