Skip to main content
 首页 » 编程设计

python之PyQt 和 MDI 如何正确使用

2025年05月04日10thcjp

我正在使用 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() 

之后一切正常。