2014-02-13 114 views
2

我使用python 2.7和PyQt4的和Windows 7PyQt和MDI如何正确使用它?

我有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_()) 

回答

1

嗯,我找到了答案有什么建议?

我所做的是消除最小尺寸

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() 

之后,一切都在正常工作。

相关问题