主要形式和儿童形式

时间:2014-11-20 14:17:12

标签: python python-2.7 pyqt

我是pyqt设计的新手 我有一个问题。

我有一张主表格。和一个儿童形式。 我希望在父表单中打开子表单。

我怎么能在python中做到这一点?

我编写了一个只打开表单的代码。 但它没有在表格中打开它?

由于

##this method creates an Form Main
class FrmMainForm (QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.uiMain = FrmMain.Ui_MainWindow()
        self.uiMain.setupUi(self)
        action = self.uiMain.menuManual_Mode.addAction(self.tr('ManualMode'))
        action.triggered.connect(self.handleNewWindow)

    def handleNewWindow(self):
       ex = Main(self.uiMain)
       ex.show()


class Main(QtGui.QWidget):
    white   =  "QWidget { background-color:#FFFFFF }"
    red     =  "QWidget { background-color:#AB0000}"
    green   =  "QWidget { background-color:#00C000}"

    def __init__(self,p):
       QtGui.QWidget.__init__(self)
       self.p = p
       self.initLogAnalyzerManuall()


    def initLogAnalyzerManuall(self):
        QtGui.QWidget.__init__(self)
        self.ui = Ui_Form()
        self.ui.setupUi(self,self.p)

1 个答案:

答案 0 :(得分:2)

handleNewWindow方法返回时,子窗口将被垃圾收集,因此永远不会有机会显示。

您需要保留对子窗口的引用,但是您的方式取决于您要实现的目标。您是否真的想要在每次单击按钮时打开 new 窗口?如果是这样,那么这样做:

    def handleNewWindow(self):
       ex = Main(self)
       ex.show()

class Main(QtGui.QWidget):
    ...
    def __init__(self, parent):
        QtGui.QWidget.__init__(self, parent)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.ui = Ui_Form()
        self.ui.setupUi(self)

另一方面,如果您希望每次都打开相同的子窗口,请执行以下操作:

class FrmMainForm (QtGui.QWidget):
    def __init__(self):
        ...
        self._child_window = None

    def handleNewWindow(self):
       if self._child_window is None:
           self._child_window = Main(self)
       self._child_window.show()

class Main(QtGui.QWidget):
    ...
    def __init__(self, parent):
        QtGui.QWidget.__init__(self, parent)
        self.ui = Ui_Form()
        self.ui.setupUi(self)

请注意,在这两种情况下,您都可以使用self.parent()从子窗口访问主窗口。