简体   繁体   English

如何使用 PYQT5 和 ZA7F5F352326B92782B7136

[英]how to put a window inside another window employing mdiArea in from the menu, using PYQT5 and Python 3?

I have used Qt designer 5 to create three different windows, the principal MainWindows.py the subwindows subVENTANA1.py and subVENTANA2.py我使用 Qt 设计器 5 创建了三个不同的 windows,主要MainWindows.py子窗口subVENTANA1.py和 subVENTANA2.py

How can I call the sub-windows from MainWindows.py , with the use of mdiArea ?如何使用mdiAreaMainWindows.py调用子窗口?

In MainWindows.py only have a menu bar, in this menu there are several subMenus, in this case 2 submenus.MainWindows.py中只有一个菜单栏,在这个菜单中有几个子菜单,在本例中是 2 个子菜单。 I´ve tried did but I don´t understand how to call with example我试过了,但我不明白如何用例子打电话

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)
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_mainWindow(object):
    def setupUi(self, mainWindow):
        mainWindow.setObjectName("mainWindow")
        mainWindow.resize(670, 548)
        mainWindow.setLayoutDirection(QtCore.Qt.LeftToRight)
        self.centralwidget = QtWidgets.QWidget(mainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.mdiArea = QtWidgets.QMdiArea(self.centralwidget)
        self.mdiArea.setObjectName("mdiArea")
        self.gridLayout.addWidget(self.mdiArea, 0, 0, 1, 1)
        mainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(mainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 670, 21))
        self.menubar.setObjectName("menubar")
        self.menuAn_lisis = QtWidgets.QMenu(self.menubar)
        self.menuAn_lisis.setObjectName("menuAn_lisis")
        self.menuEliminar_ruido = QtWidgets.QMenu(self.menubar)
        self.menuEliminar_ruido.setObjectName("menuEliminar_ruido")
        self.menuMenu_C = QtWidgets.QMenu(self.menubar)
        self.menuMenu_C.setObjectName("menuMenu_C")
        mainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(mainWindow)
        self.statusbar.setObjectName("statusbar")
        mainWindow.setStatusBar(self.statusbar)
        self.actionNDVI = QtWidgets.QAction(mainWindow)
        self.actionNDVI.setObjectName("actionNDVI")
        self.actionEliminar_Ruido = QtWidgets.QAction(mainWindow)
        self.actionEliminar_Ruido.setObjectName("actionEliminar_Ruido")
        self.actionBrillo_Contraste = QtWidgets.QAction(mainWindow)
        self.actionBrillo_Contraste.setObjectName("actionBrillo_Contraste")
        self.actionDetecci_n_de_Bordes = QtWidgets.QAction(mainWindow)
        self.actionDetecci_n_de_Bordes.setObjectName("actionDetecci_n_de_Bordes")
        self.actionEcualizaci_n = QtWidgets.QAction(mainWindow)
        self.actionEcualizaci_n.setObjectName("actionEcualizaci_n")
        self.actionMostrar_ventna_4 = QtWidgets.QAction(mainWindow)
        self.actionMostrar_ventna_4.setObjectName("actionMostrar_ventna_4")
        self.actionMostar_subventna2 = QtWidgets.QAction(mainWindow)
        self.actionMostar_subventna2.setObjectName("actionMostar_subventna2")
        self.menuAn_lisis.addAction(self.actionBrillo_Contraste)
        self.menuAn_lisis.addAction(self.actionMostar_subventna2)
        self.menuEliminar_ruido.addAction(self.actionEliminar_Ruido)
        self.menuEliminar_ruido.addAction(self.actionMostrar_ventna_4)
        self.menubar.addAction(self.menuAn_lisis.menuAction())
        self.menubar.addAction(self.menuEliminar_ruido.menuAction())
        self.menubar.addAction(self.menuMenu_C.menuAction())

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

    def retranslateUi(self, mainWindow):
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "Venta principal"))
        self.menuAn_lisis.setTitle(_translate("mainWindow", "Memu A"))
        self.menuEliminar_ruido.setTitle(_translate("mainWindow", "Menu B"))
        self.menuMenu_C.setTitle(_translate("mainWindow", "Menu C"))
        self.actionNDVI.setText(_translate("mainWindow", "NDVI"))
        self.actionEliminar_Ruido.setText(_translate("mainWindow", "Mostar subventna 3"))
        self.actionBrillo_Contraste.setText(_translate("mainWindow", "Mostar subventna 1"))
        self.actionDetecci_n_de_Bordes.setText(_translate("mainWindow", "Detección de Bordes"))
        self.actionEcualizaci_n.setText(_translate("mainWindow", "Ecualización"))
        self.actionMostrar_ventna_4.setText(_translate("mainWindow", "Mostar subventna 4"))
        self.actionMostar_subventna2.setText(_translate("mainWindow", "Mostar subventna 2"))

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QMainWindow()
    ui = Ui_mainWindow()
    ui.setupUi(mainWindow)
    mainWindow.show()
    sys.exit(app.exec_())

subVENTANA1.py subVENTANA1.py

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_subWindow1(object):
    def setupUi(self, subWindow1):
        subWindow1.setObjectName("subWindow1")
        subWindow1.resize(388, 300)
        font = QtGui.QFont()
        font.setPointSize(10)
        font.setBold(True)
        font.setWeight(75)
        subWindow1.setFont(font)
        subWindow1.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        subWindow1.setLayoutDirection(QtCore.Qt.RightToLeft)
        self.centralwidget = QtWidgets.QWidget(subWindow1)
        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)
        subWindow1.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(subWindow1)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 388, 21))
        self.menubar.setObjectName("menubar")
        subWindow1.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(subWindow1)
        self.statusbar.setObjectName("statusbar")
        subWindow1.setStatusBar(self.statusbar)

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

    def retranslateUi(self, subWindow1):
        _translate = QtCore.QCoreApplication.translate
        subWindow1.setWindowTitle(_translate("subWindow1", "Sub Ventna 1"))
        self.groupBox.setTitle(_translate("subWindow1", "Imagen original"))
        self.pushButton.setText(_translate("subWindow1", "Abrir imagen"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    subWindow1 = QtWidgets.QMainWindow()
    ui = Ui_subWindow1()
    ui.setupUi(subWindow1)
    subWindow1.show()
    sys.exit(app.exec_())

subVENTANA2.py subVENTANA2.py

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

I try to do something like this:我尝试做这样的事情:

Example例子

In my case like this: myExample在我这样的情况下: myExample

I hope you understand我希望你明白

setWidget() requires a QWidget argument, not the ui_* subclass used from the pyuic generated files. 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_())

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM