Python PyQt和MDI如何正确使用?

Python PyQt和MDI如何正确使用?,python,pyqt4,mdi,Python,Pyqt4,Mdi,我正在使用Python2.7、PyQt4和Windows7 我有3个python脚本: 简单的计算器 其中一个缩短了一个长url:我用bitly API实现了它 还有一种是将文本放在剪贴板上,返回相同的文本,但没有空格(我在工作中使用)。 我已经创建了一个主应用程序来管理这3个。在MDI区域内打开、关闭、重新打开等,但当我打开和关闭一个应用程序并尝试打开另一个应用程序时,会发送错误:“QMdiArea::addSubWindow:窗口已添加”。当我关闭主应用程序时,系统会发送一个“python.

我正在使用Python2.7、PyQt4和Windows7

我有3个python脚本:

简单的计算器 其中一个缩短了一个长url:我用bitly API实现了它 还有一种是将文本放在剪贴板上,返回相同的文本,但没有空格(我在工作中使用)。 我已经创建了一个主应用程序来管理这3个。在MDI区域内打开、关闭、重新打开等,但当我打开和关闭一个应用程序并尝试打开另一个应用程序时,会发送错误:“QMdiArea::addSubWindow:窗口已添加”。当我关闭主应用程序时,系统会发送一个“python.exe停止工作”错误。请在这上面放点灯

这是我在主应用程序中使用的代码。我接受任何建议

import sys
from PyQt4 import QtGui, QtCore
from gestor import Ui_frmPrincipal
from calculadora1 import Calc
from URL_Short import URL_Short
from sinespacios import SinEs

class Win1(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.vtn = Ui_frmPrincipal()
        self.vtn.setupUi(self)
        self.subwindow = QtGui.QMdiSubWindow()
        self.subwindow.setMinimumSize(400, 200)


        self.calc = Calc()
        self.urls = URL_Short()
        self.sine = SinEs()


        self.connect(self.vtn.btnSalir, QtCore.SIGNAL('clicked()'), QtCore.SLOT('close()'))
        self.connect(self.vtn.btnCalc, QtCore.SIGNAL('clicked()'), self.OpenCalc)
        self.connect(self.vtn.btnPegar, QtCore.SIGNAL('clicked()'), self.OpenPaster)
        self.connect(self.vtn.btnShortu, QtCore.SIGNAL('clicked()'), self.OpenShortURL)

    def OpenCalc(self):
        if self.vtn.mdiApps.activeSubWindow() is None:
            self.subwindow.setWidget(self.calc)
            self.vtn.mdiApps.addSubWindow(self.subwindow)
            self.subwindow.show()
            self.subwindow.widget().show()


    def OpenPaster(self):
        if self.vtn.mdiApps.activeSubWindow() is None:
            self.subwindow.setWidget(self.sine)
            self.vtn.mdiApps.addSubWindow(self.subwindow)
            self.subwindow.show()
            self.subwindow.widget().show()

    def OpenShortURL(self):
        if self.vtn.mdiApps.activeSubWindow() is None:
            self.subwindow.setWidget(self.urls)
            self.vtn.mdiApps.addSubWindow(self.subwindow)
            self.subwindow.show()
            self.subwindow.widget().show()



if __name__=='__main__':
    app = QtGui.QApplication(sys.argv)
    win = Win1()
    win.show()
    sys.exit(app.exec_())

我找到了答案

我所做的就是去掉最小尺寸

self.subwindow.setMinimumSize(400, 200)
创建用于关闭子窗口的函数:

def closeIt(self):
        self.vtn.mdiApps.removeSubWindow(self.subwindow)
并修改了每个函数,例如使用OpenCalc函数:

def OpenCalc(self):

    a = self.calc.height() + 20
    b = self.calc.width()

    if self.vtn.mdiApps.activeSubWindow() is None:

        self.subwindow.setMinimumSize(b, a)
        self.subwindow.setWidget(self.calc)
        self.vtn.mdiApps.addSubWindow(self.subwindow)
        self.subwindow.show()
        self.subwindow.widget().show()
在那之后一切正常