如何使用PYQT5和Python3将一个窗口放在另一个窗口中,从菜单中选择一个区域?

如何使用PYQT5和Python3将一个窗口放在另一个窗口中,从菜单中选择一个区域?,python,pyqt5,Python,Pyqt5,我使用Qt designer 5创建了三个不同的窗口, 主体MainWindows.py 子窗口subVENTANA1.py和subVENTANA2.py 如何使用mdiArea从MainWindows.py调用子窗口 在“只有一个菜单栏”中,此菜单中有多个子菜单,在本例中为2个子菜单。 我已经试过了,但我不知道如何打电话给你 like this: from subVentana import Ui_subwindow class MainWindow(QMainWindow): de

我使用Qt designer 5创建了三个不同的窗口, 主体MainWindows.py 子窗口subVENTANA1.py和subVENTANA2.py

如何使用mdiAreaMainWindows.py调用子窗口

在“只有一个菜单栏”中,此菜单中有多个子菜单,在本例中为2个子菜单。 我已经试过了,但我不知道如何打电话给你

like this:

from subVentana import Ui_subwindow
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent=parent)
        
        subwindow = QMdiSubWindow()
        subwindow.setWidget(Ui_subwindow())
        self.mdiArea.addSubWindow(subwindow)

我尝试这样做:

我的情况是这样的:

我希望您理解

setWidget()
需要一个
QWidget
参数,而不是pyuic生成的文件中使用的
ui.*
子类

from PyQt5 import QtCore, QtGui, QtWidgets
from ui_mainwindow import Ui_mainWindow
from subVENTANA1 import Ui_subWindow1

class MainWindow(QtWidgets.QMainWindow, Ui_mainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent=parent)
        self.setupUi(self)
        
        subwindow1 = QtWidgets.QMdiSubWindow()

        # create the widget instance
        window1 = QtWidgets.QMainWindow()
        # create the ui class instance
        ui = Ui_subWindow1()
        # set the ui for the widget instance
        ui.setupUi(window1)
        # set the widget for the subwindow
        subwindow1.setWidget(window1)

        self.mdiArea.addSubWindow(subwindow1)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())
从PyQt5导入QtCore、QtGui、qtwidget
从ui\u主窗口导入ui\u主窗口
从subVENTANA1导入Ui_子窗口1
类MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
def uuu init uuu(self,parent=None):
qtwidts.QMainWindow.\uuuuu init\uuuuuu(self,parent=parent)
self.setupUi(self)
subwindow1=QtWidgets.qmduseBwindow()
#创建小部件实例
window1=QtWidgets.QMainWindow()
#创建ui类实例
ui=ui_子窗口1()
#设置小部件实例的ui
ui.setupUi(window1)
#设置子窗口的小部件
子窗口1.setWidget(窗口1)
self.mdiArea.addSubWindow(子窗口1)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
mainWindow=mainWindow()
mainWindow.show()
sys.exit(app.exec_())
setWidget()
需要一个
QWidget
参数,而不是从pyuic生成的文件中使用的
ui.*
子类

from PyQt5 import QtCore, QtGui, QtWidgets
from ui_mainwindow import Ui_mainWindow
from subVENTANA1 import Ui_subWindow1

class MainWindow(QtWidgets.QMainWindow, Ui_mainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent=parent)
        self.setupUi(self)
        
        subwindow1 = QtWidgets.QMdiSubWindow()

        # create the widget instance
        window1 = QtWidgets.QMainWindow()
        # create the ui class instance
        ui = Ui_subWindow1()
        # set the ui for the widget instance
        ui.setupUi(window1)
        # set the widget for the subwindow
        subwindow1.setWidget(window1)

        self.mdiArea.addSubWindow(subwindow1)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())
从PyQt5导入QtCore、QtGui、qtwidget
从ui\u主窗口导入ui\u主窗口
从subVENTANA1导入Ui_子窗口1
类MainWindow(QtWidgets.QMainWindow,Ui_MainWindow):
def uuu init uuu(self,parent=None):
qtwidts.QMainWindow.\uuuuu init\uuuuuu(self,parent=parent)
self.setupUi(self)
subwindow1=QtWidgets.qmduseBwindow()
#创建小部件实例
window1=QtWidgets.QMainWindow()
#创建ui类实例
ui=ui_子窗口1()
#设置小部件实例的ui
ui.setupUi(window1)
#设置子窗口的小部件
子窗口1.setWidget(窗口1)
self.mdiArea.addSubWindow(子窗口1)
如果名称=“\uuuuu main\uuuuuuuu”:
导入系统
app=qtwidts.QApplication(sys.argv)
mainWindow=mainWindow()
mainWindow.show()
sys.exit(app.exec_())


请提供一个非外部链接。我已将代码和图像放入窗口中。我无法理解您所说的窗口是什么意思。您正在寻找弹出窗口吗?如果可能的话,先添加窗口呈现方式的屏幕截图,我尝试将subVENTANA2.py和subVENTANA1.py模块中的主窗口更改为QWidget,并让它成为MainWindows.py。伊卡利想知道如何使窗口显示在灰色空间,而不是作为弹出窗口(不在主窗口之外)谢谢:)请提供,不是外部链接我已经把代码和图像放在窗口里面了,我能理解你所说的窗口是什么意思,你在找弹出窗口吗?如果可能的话,先添加窗口呈现方式的屏幕截图,我尝试在模块subVENTANA2.py和subVENTANA1.py中将主窗口更改为QWidget,并让它成为MainWindows.py。伊卡利想知道如何使窗口显示在灰色空间,而不是作为弹出窗口(不在主窗口之外)谢谢:)这对我很有帮助!。非常感谢@musicamante!!对不起@musicamante!!我如何使用这个类中的QMenuBar?@OsvaltOsvalth你是什么意思?QMainWindow的菜单栏可以通过与任何QMainWindow一样的方式访问…我试图调用
类主窗口(qtwidts.QMainWindow,Ui\u MainWindow)中的菜单栏:
但是我无法访问
Ui\u主窗口(对象)中的菜单栏:
我已经可以使用该对象了。斯派德很傻。抱歉。但我正在尝试启动
self.actionBrillo\u contract.triggered.connect(self.mdiArea.addSubWindow(subwindow1))
,但它显示此
TypeError:argument 1具有意外的类型“qmdusubwindow”
,这对我很有帮助!。非常感谢@musicamante!!对不起@musicamante!!我如何使用这个类中的QMenuBar?@OsvaltOsvalth你是什么意思?QMainWindow的菜单栏可以通过与任何QMainWindow一样的方式访问…我试图调用
类主窗口(qtwidts.QMainWindow,Ui\u MainWindow)中的菜单栏:
但是我无法访问
Ui\u主窗口(对象)中的菜单栏:
我已经可以使用该对象了。斯派德很傻。抱歉。但我正在尝试启动
self.actionBrillo\u contract.triggered.connect(self.mdiArea.addSubWindow(subwindow1))
,但它显示此
TypeError:参数1具有意外的类型“qmdusubwindow”
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_subWindow2(object):
    def setupUi(self, subWindow2):
        subWindow2.setObjectName("subWindow2")
        subWindow2.resize(366, 299)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        subWindow2.setFont(font)
        subWindow2.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        subWindow2.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.centralwidget = QtWidgets.QWidget(subWindow2)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setObjectName("groupBox")
        self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 3)
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem, 0, 3, 1, 1)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem1, 1, 0, 1, 1)
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout.addWidget(self.pushButton, 1, 1, 1, 1)
        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout.addItem(spacerItem2, 1, 2, 1, 1)
        self.gridLayout_2.addLayout(self.gridLayout, 0, 0, 1, 1)
        subWindow2.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(subWindow2)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 366, 23))
        self.menubar.setObjectName("menubar")
        subWindow2.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(subWindow2)
        self.statusbar.setObjectName("statusbar")
        subWindow2.setStatusBar(self.statusbar)

        self.retranslateUi(subWindow2)
        QtCore.QMetaObject.connectSlotsByName(subWindow2)

    def retranslateUi(self, subWindow2):
        _translate = QtCore.QCoreApplication.translate
        subWindow2.setWindowTitle(_translate("subWindow2", "Sub Ventana 2"))
        self.groupBox.setTitle(_translate("subWindow2", "Imagen procesada"))
        self.pushButton.setText(_translate("subWindow2", "Ver"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    subWindow2 = QtWidgets.QMainWindow()
    ui = Ui_subWindow2()
    ui.setupUi(subWindow2)
    subWindow2.show()
    sys.exit(app.exec_())
from PyQt5 import QtCore, QtGui, QtWidgets
from ui_mainwindow import Ui_mainWindow
from subVENTANA1 import Ui_subWindow1

class MainWindow(QtWidgets.QMainWindow, Ui_mainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent=parent)
        self.setupUi(self)
        
        subwindow1 = QtWidgets.QMdiSubWindow()

        # create the widget instance
        window1 = QtWidgets.QMainWindow()
        # create the ui class instance
        ui = Ui_subWindow1()
        # set the ui for the widget instance
        ui.setupUi(window1)
        # set the widget for the subwindow
        subwindow1.setWidget(window1)

        self.mdiArea.addSubWindow(subwindow1)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = MainWindow()
    mainWindow.show()
    sys.exit(app.exec_())