我正在使用 python 2.7、PyQt4 和 Windows 7。
我有 3 个 python 脚本:
一个简单的计算器 一个短网址:我用 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()
之后一切正常。
