gridlayout перекрывает окно pyqt5
Продолжение вопроса по открытию окна в окне. Сделал я по быстрому форму, код есть и все почти что работает. Но проблема в том, что gridlayout перекрывает все кнопки на главном окне и нельзя никуда нажать. Но если grdilayout перенести назад, то и второе окно будет открываться сзади, не поверх других окон. Что можно сделать? помогите!
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow_2(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(701, 166)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.dial = QtWidgets.QDial(self.centralwidget)
self.dial.setGeometry(QtCore.QRect(620, 60, 50, 64))
self.dial.setObjectName("dial")
self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox.setGeometry(QtCore.QRect(10, 10, 70, 18))
self.checkBox.setObjectName("checkBox")
self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_2.setGeometry(QtCore.QRect(10, 50, 91, 18))
self.checkBox_2.setObjectName("checkBox_2")
self.checkBox_3 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_3.setGeometry(QtCore.QRect(10, 90, 91, 18))
self.checkBox_3.setObjectName("checkBox_3")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.checkBox.setText(_translate("MainWindow", "звук"))
self.checkBox_2.setText(_translate("MainWindow", "уведомления"))
self.checkBox_3.setText(_translate("MainWindow", "прогресс"))
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(700, 164)
MainWindow.setMinimumSize(QtCore.QSize(700, 164))
MainWindow.setMaximumSize(QtCore.QSize(700, 164))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(0, 0, 171, 61))
self.pushButton.setObjectName("pushButton")
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.setGeometry(QtCore.QRect(0, 60, 741, 21))
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(170, 0, 531, 61))
self.textEdit.setObjectName("textEdit")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(0, 80, 171, 22))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(-10, 0, 811, 171))
self.label.setStyleSheet("background-color: rgb(81, 81, 81);")
self.label.setText("")
self.label.setObjectName("label")
self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 0, 701, 161))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.label.raise_()
self.pushButton.raise_()
self.progressBar.raise_()
self.textEdit.raise_()
self.comboBox.raise_()
self.gridLayoutWidget.raise_()
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Открыть настройки"))
self.comboBox.setItemText(0, _translate("MainWindow", "1"))
self.comboBox.setItemText(1, _translate("MainWindow", "2"))
self.comboBox.setItemText(2, _translate("MainWindow", "3"))
self.comboBox.setItemText(3, _translate("MainWindow", "4"))
self.comboBox.setItemText(4, _translate("MainWindow", "5"))
self.comboBox.setItemText(5, _translate("MainWindow", "6"))
self.comboBox.setItemText(6, _translate("MainWindow", "7"))
class ExampleApp2(QtWidgets.QMainWindow, Ui_MainWindow_2): # Ui_MainWindow_2
def __init__(self):
super().__init__()
self.setupUi(self)
class ExampleApp1(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton.clicked.connect(self.onClicked)
def onClicked(self):
self.exampleApp2 = ExampleApp2()
self.gridLayout.addWidget(self.exampleApp2, 1, 0, 1, 2)
if __name__=="__main__":
app = QtWidgets.QApplication(sys.argv)
window = ExampleApp1()
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Вы пишите: Продолжение вопроса по открытию окна в окне. Сделал я по быстрому форму,...
Вы продолжаете вопрос, но почему-то основу берете с моего ответа, который не отмечен как правильный.
Я вам, по-моему, писал, что никогда не надо торопиться! Что значит Сделал я по быстрому форму ? Вы плохо сделали формы и и не поместили виджеты в макеты.
Еще раз вам говорю, что вы не открываете окно в окне, вы просто размещаете виджеты о окне используя gridLayout.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow_2(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(701, 166)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.dial = QtWidgets.QDial(self.centralwidget)
self.dial.setGeometry(QtCore.QRect(620, 60, 50, 64))
self.dial.setObjectName("dial")
self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox.setGeometry(QtCore.QRect(10, 10, 70, 18))
self.checkBox.setObjectName("checkBox")
self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_2.setGeometry(QtCore.QRect(10, 50, 91, 18))
self.checkBox_2.setObjectName("checkBox_2")
self.checkBox_3 = QtWidgets.QCheckBox(self.centralwidget)
self.checkBox_3.setGeometry(QtCore.QRect(10, 90, 91, 18))
self.checkBox_3.setObjectName("checkBox_3")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.checkBox.setText(_translate("MainWindow", "звук"))
self.checkBox_2.setText(_translate("MainWindow", "уведомления"))
self.checkBox_3.setText(_translate("MainWindow", "прогресс"))
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(700, 364)
# MainWindow.setMinimumSize(QtCore.QSize(700, 164))
# MainWindow.setMaximumSize(QtCore.QSize(700, 164))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(0, 0, 171, 61))
self.pushButton.setObjectName("pushButton")
self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
self.progressBar.setGeometry(QtCore.QRect(0, 60, 741, 21))
self.progressBar.setProperty("value", 24)
self.progressBar.setObjectName("progressBar")
self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
self.textEdit.setGeometry(QtCore.QRect(170, 0, 531, 61))
self.textEdit.setObjectName("textEdit")
self.comboBox = QtWidgets.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(0, 80, 171, 22))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(-10, 0, 811, 171))
self.label.setStyleSheet("background-color: rgb(81, 81, 81);")
self.label.setText("QLabel")
self.label.setObjectName("label")
self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
# self.gridLayoutWidget.setGeometry(QtCore.QRect(0, 0, 701, 161))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.gridLayout.setContentsMargins(0, 0, 0, 0)
self.gridLayout.setObjectName("gridLayout")
self.label.raise_()
self.pushButton.raise_()
self.progressBar.raise_()
self.textEdit.raise_()
self.comboBox.raise_()
self.gridLayoutWidget.raise_()
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "Открыть настройки"))
self.comboBox.setItemText(0, _translate("MainWindow", "1"))
self.comboBox.setItemText(1, _translate("MainWindow", "2"))
self.comboBox.setItemText(2, _translate("MainWindow", "3"))
self.comboBox.setItemText(3, _translate("MainWindow", "4"))
self.comboBox.setItemText(4, _translate("MainWindow", "5"))
self.comboBox.setItemText(5, _translate("MainWindow", "6"))
self.comboBox.setItemText(6, _translate("MainWindow", "7"))
class ExampleApp2(QtWidgets.QMainWindow, Ui_MainWindow_2):
def __init__(self):
super().__init__()
self.setupUi(self)
class ExampleApp1(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
# ++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.gridLayout.addWidget(self.pushButton, 0, 0)
self.gridLayout.addWidget(self.progressBar, 1, 0)
self.gridLayout.addWidget(self.textEdit, 2, 0)
self.gridLayout.addWidget(self.comboBox, 3, 0)
self.gridLayout.addWidget(self.label, 4, 0)
self.pushButton.clicked.connect(self.onClicked)
def onClicked(self):
self.exampleApp2 = ExampleApp2()
self.gridLayout.addWidget(self.exampleApp2.dial, 5, 0)
self.gridLayout.addWidget(self.exampleApp2.checkBox, 6, 0)
self.gridLayout.addWidget(self.exampleApp2.checkBox_2, 7, 0)
# ++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
if __name__=="__main__":
app = QtWidgets.QApplication(sys.argv)
window = ExampleApp1()
window.show()
sys.exit(app.exec_())
