我是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)
答案 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()
从子窗口访问主窗口。