[英]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 ?如何使用mdiArea从MainWindows.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_())
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_())
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:我尝试做这样的事情:
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.