如何从PyQt中的另一个QWidget调用QWidget

时间:2014-03-12 10:39:08

标签: python pyqt qt-designer

我正在使用基于QWidget的PyQt开发应用程序。我把我的整个应用程序放在一个类中(名为"示例")。在这个应用程序中,我有一个按钮,它调用另一个QWidget窗口(名为" Report Widget")我在QtDesigner上设计并打开它。 问题是我不知道该怎么做。这是我使用的方法(来自我在互联网上找到的东西)。 在我的主要课程"示例"中,一个方法定义了按钮调用"报告小部件" :

ReportBtn = QtGui.QPushButton("Generate report")
ReportBtn.clicked.connect(self.ShowReportWidget)

第二行调用Example(main)类的ShowReportWidget方法:

def ShowReportWidget(self):
    self.f = QtGui.QWidget()
    self.ReportWidget = ReportWidget(self.f)
    self.ReportWidget.show()

此方法调用类ReportWidget,它是Example(main)类中的一个类:

class ReportWidget(QtGui.QWidget):
def __init__(self, parent = None):
    QtGui.QWidget.__init__(self)
    self.ui = rw.Ui_ReportWidget()
    self.ui.setupUi(parent)

最后,这个类引用了一个外部类(Ui_ReportWidget),它包含在另一个单独的Python文件(从QtDesigner .ui文件生成的文件)中,我在脚本的开头导入为rw。

问题是,使用此方法,当我单击“报告窗口小部件”按钮时,会弹出一个新窗口,但该窗口为空。未加载Ui_ReportWidget类的内容。

我希望我的问题很清楚。

由于

1 个答案:

答案 0 :(得分:3)

SetupUi将Qwidget作为输入,而 init ()函数应将调用QObject作为父级。

def ShowReportWidget(self):
    self.f = QtGui.QWidget()
    self.ReportWidget = ReportWidget(self)
    self.ReportWidget.setupUi(self.f)
    self.f.exec_()

class ReportWidget(QtGui.QWidget):
    def __init__(self, parent = None):
        QtGui.QWidget.__init__(self,parent)

    def setupUi(self,Widget):
        self.ui = rw.Ui_ReportWidget()
        self.ui.setupUi(Widget)