Python Forum
[PyQt] Can't get MDIarea to resize automatically with Main Window
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyQt] Can't get MDIarea to resize automatically with Main Window
#1
Hello, everyone! Greetings from Brazil. I’m new to Python and developing an app with Qt Designer / PyCharm / PyQt5. The issue is that I can’t get the MDIarea to resize automatically inside the main window. Any ideas on how to do that? Here is the original code generated by Qt Designer:

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'bremington-mdi.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):

    def setupUi(self, MainWindow):

        MainWindow.setObjectName("MainWindow")
        MainWindow.setWindowModality(QtCore.Qt.WindowModal)
        MainWindow.resize(781, 478)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.mdiArea = QtWidgets.QMdiArea(self.centralwidget)
        self.mdiArea.setGeometry(QtCore.QRect(0, 0, 600, 400))
        self.mdiArea.setAutoFillBackground(True)
        self.mdiArea.setObjectName("mdiArea")

        self.subWindowUsers = QtWidgets.QWidget()
        self.subWindowUsers.setMinimumSize(QtCore.QSize(466, 267))
        self.subWindowUsers.setObjectName("subWindowUsers")

        self.pushButton_save_2 = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_save_2.setGeometry(QtCore.QRect(330, 220, 75, 23))
        self.pushButton_save_2.setObjectName("pushButton_save_2")

        self.pushButton_previous = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_previous.setGeometry(QtCore.QRect(150, 190, 75, 23))
        self.pushButton_previous.setObjectName("pushButton_previous")

        self.lineEdit_date = QtWidgets.QLineEdit(self.subWindowUsers)
        self.lineEdit_date.setGeometry(QtCore.QRect(110, 50, 91, 20))
        self.lineEdit_date.setObjectName("lineEdit_date")

        self.pushButton_edit = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_edit.setGeometry(QtCore.QRect(150, 220, 75, 23))
        self.pushButton_edit.setObjectName("pushButton_edit")

        self.pushButton_update = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_update.setGeometry(QtCore.QRect(240, 220, 75, 23))
        self.pushButton_update.setObjectName("pushButton_update")

        self.pushButton_next = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_next.setGeometry(QtCore.QRect(240, 190, 75, 23))
        self.pushButton_next.setObjectName("pushButton_next")

        self.pushButton_first = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_first.setGeometry(QtCore.QRect(60, 190, 75, 23))
        self.pushButton_first.setObjectName("pushButton_first")

        self.pushButton_last = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_last.setGeometry(QtCore.QRect(330, 190, 75, 23))
        self.pushButton_last.setObjectName("pushButton_last")

        self.pushButton_add = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_add.setGeometry(QtCore.QRect(60, 220, 75, 23))
        self.pushButton_add.setObjectName("pushButton_add")

        self.pushButton_cancel = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_cancel.setGeometry(QtCore.QRect(240, 220, 75, 23))
        self.pushButton_cancel.setObjectName("pushButton_cancel")

        self.lineEdit_login = QtWidgets.QLineEdit(self.subWindowUsers)
        self.lineEdit_login.setGeometry(QtCore.QRect(110, 110, 171, 20))
        self.lineEdit_login.setObjectName("lineEdit_login")

        self.lineEdit_name = QtWidgets.QLineEdit(self.subWindowUsers)
        self.lineEdit_name.setGeometry(QtCore.QRect(110, 80, 271, 20))
        self.lineEdit_name.setObjectName("lineEdit_name")

        self.pushButton_save = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_save.setGeometry(QtCore.QRect(330, 220, 75, 23))
        self.pushButton_save.setObjectName("pushButton_save")

        self.lineEdit_number = QtWidgets.QLineEdit(self.subWindowUsers)
        self.lineEdit_number.setGeometry(QtCore.QRect(110, 20, 61, 20))
        self.lineEdit_number.setObjectName("lineEdit_number")

        self.lineEdit_pwd = QtWidgets.QLineEdit(self.subWindowUsers)
        self.lineEdit_pwd.setGeometry(QtCore.QRect(110, 140, 113, 20))
        self.lineEdit_pwd.setObjectName("lineEdit_pwd")

        MainWindow.setCentralWidget(self.centralwidget)

        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 781, 21))
        self.menubar.setObjectName("menubar")

        self.menuUsers = QtWidgets.QMenu(self.menubar)
        self.menuUsers.setObjectName("menuUsers")
        MainWindow.setMenuBar(self.menubar)

        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.actionFile_usuarios = QtWidgets.QAction(MainWindow)
        self.actionFile_usuarios.setObjectName("actionFile_usuarios")

        self.menuUsers.addAction(self.actionFile_usuarios)
        self.menubar.addAction(self.menuUsers.menuAction())

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

        self.actionFile_usuarios.triggered.connect(lambda: self.OpenUserForm("Usuários"))

        self.pushButton_cancel.hide()
        self.pushButton_save.hide()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Bremington"))
        self.subWindowUsers.setWindowTitle(_translate("MainWindow", "Subwindow"))
        self.pushButton_save_2.setText(_translate("MainWindow", "Delete"))
        self.pushButton_previous.setText(_translate("MainWindow", "< Previous"))
        self.pushButton_edit.setText(_translate("MainWindow", "Edit"))
        self.pushButton_update.setText(_translate("MainWindow", "Update"))
        self.pushButton_next.setText(_translate("MainWindow", "Next >"))
        self.pushButton_first.setText(_translate("MainWindow", "<< First"))
        self.pushButton_last.setText(_translate("MainWindow", "Last >>"))
        self.pushButton_add.setText(_translate("MainWindow", "New user"))
        self.pushButton_cancel.setText(_translate("MainWindow", "Cancel"))
        self.pushButton_save.setText(_translate("MainWindow", "Save"))
        self.menuUsers.setTitle(_translate("MainWindow", "Arquivos"))
        self.actionFile_usuarios.setText(_translate("MainWindow", "Usuários"))

    def OpenUserForm(self, text):
        self.mdiArea.addSubWindow(ui.subWindowUsers)
        ui.subWindowUsers.setWindowTitle(text)
        ui.subWindowUsers.show()


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_())
Thanks a lot for your time and help. I really appreciate it!

Best regards,

Smile

Attached Files

Thumbnail(s)
   
Reply
#2
You are using QtDesigner, thats the problem. Better use a Layout.
Reply
#3
Whenever you see this you will have a problem if your application window is resizeable
setGeometry(QtCore.QRect(150, 220, 75, 23))
A resizeable window should not contain any setGeometry calls.

To get your layout to resize nicely you need to use Layouts (Vertical Layout, Horizontal Layout, Grid Layout, Form Layout). These will grow and shrink when the window grows and shrinks and they will do their best to adjust the widgets to fit.
JayCee likes this post
Reply
#4
read this before you next use QtDesigner.

https://doc.qt.io/qt-5/designer-layouts.html

Try that for now

from PyQt5 import QtCore, QtGui, QtWidgets
 
 
class Ui_MainWindow(object):
 
    def setupUi(self, MainWindow):
 
        MainWindow.setObjectName("MainWindow")
        MainWindow.setWindowModality(QtCore.Qt.WindowModal)
        MainWindow.resize(781, 478)
        
        self.mdiArea = QtWidgets.QMdiArea()
        self.mdiArea.setGeometry(0, 0, 600, 400)
        self.mdiArea.setAutoFillBackground(True)
        self.mdiArea.setObjectName("mdiArea")
 
        self.subWindowUsers = QtWidgets.QWidget()
        self.subWindowUsers.setMinimumSize(QtCore.QSize(466, 267))
        self.subWindowUsers.setObjectName("subWindowUsers")
 
        self.pushButton_save_2 = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_save_2.setGeometry(QtCore.QRect(330, 220, 75, 23))
        self.pushButton_save_2.setObjectName("pushButton_save_2")
 
        self.pushButton_previous = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_previous.setGeometry(QtCore.QRect(150, 190, 75, 23))
        self.pushButton_previous.setObjectName("pushButton_previous")
 
        self.lineEdit_date = QtWidgets.QLineEdit(self.subWindowUsers)
        self.lineEdit_date.setGeometry(QtCore.QRect(110, 50, 91, 20))
        self.lineEdit_date.setObjectName("lineEdit_date")
 
        self.pushButton_edit = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_edit.setGeometry(QtCore.QRect(150, 220, 75, 23))
        self.pushButton_edit.setObjectName("pushButton_edit")
 
        self.pushButton_update = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_update.setGeometry(QtCore.QRect(240, 220, 75, 23))
        self.pushButton_update.setObjectName("pushButton_update")
 
        self.pushButton_next = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_next.setGeometry(QtCore.QRect(240, 190, 75, 23))
        self.pushButton_next.setObjectName("pushButton_next")
 
        self.pushButton_first = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_first.setGeometry(QtCore.QRect(60, 190, 75, 23))
        self.pushButton_first.setObjectName("pushButton_first")
 
        self.pushButton_last = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_last.setGeometry(QtCore.QRect(330, 190, 75, 23))
        self.pushButton_last.setObjectName("pushButton_last")
 
        self.pushButton_add = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_add.setGeometry(QtCore.QRect(60, 220, 75, 23))
        self.pushButton_add.setObjectName("pushButton_add")
 
        self.pushButton_cancel = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_cancel.setGeometry(QtCore.QRect(240, 220, 75, 23))
        self.pushButton_cancel.setObjectName("pushButton_cancel")
 
        self.lineEdit_login = QtWidgets.QLineEdit(self.subWindowUsers)
        self.lineEdit_login.setGeometry(QtCore.QRect(110, 110, 171, 20))
        self.lineEdit_login.setObjectName("lineEdit_login")
 
        self.lineEdit_name = QtWidgets.QLineEdit(self.subWindowUsers)
        self.lineEdit_name.setGeometry(QtCore.QRect(110, 80, 271, 20))
        self.lineEdit_name.setObjectName("lineEdit_name")
 
        self.pushButton_save = QtWidgets.QPushButton(self.subWindowUsers)
        self.pushButton_save.setGeometry(QtCore.QRect(330, 220, 75, 23))
        self.pushButton_save.setObjectName("pushButton_save")
 
        self.lineEdit_number = QtWidgets.QLineEdit(self.subWindowUsers)
        self.lineEdit_number.setGeometry(QtCore.QRect(110, 20, 61, 20))
        self.lineEdit_number.setObjectName("lineEdit_number")
 
        self.lineEdit_pwd = QtWidgets.QLineEdit(self.subWindowUsers)
        self.lineEdit_pwd.setGeometry(QtCore.QRect(110, 140, 113, 20))
        self.lineEdit_pwd.setObjectName("lineEdit_pwd")
 
        MainWindow.setCentralWidget(self.mdiArea)
 
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 781, 21))
        self.menubar.setObjectName("menubar")
 
        self.menuUsers = QtWidgets.QMenu(self.menubar)
        self.menuUsers.setObjectName("menuUsers")
        MainWindow.setMenuBar(self.menubar)
 
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
 
        self.actionFile_usuarios = QtWidgets.QAction(MainWindow)
        self.actionFile_usuarios.setObjectName("actionFile_usuarios")
 
        self.menuUsers.addAction(self.actionFile_usuarios)
        self.menubar.addAction(self.menuUsers.menuAction())
 
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
 
        self.actionFile_usuarios.triggered.connect(lambda: self.OpenUserForm("Usuários"))
 
        self.pushButton_cancel.hide()
        self.pushButton_save.hide()
 
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Bremington"))
        self.subWindowUsers.setWindowTitle(_translate("MainWindow", "Subwindow"))
        self.pushButton_save_2.setText(_translate("MainWindow", "Delete"))
        self.pushButton_previous.setText(_translate("MainWindow", "< Previous"))
        self.pushButton_edit.setText(_translate("MainWindow", "Edit"))
        self.pushButton_update.setText(_translate("MainWindow", "Update"))
        self.pushButton_next.setText(_translate("MainWindow", "Next >"))
        self.pushButton_first.setText(_translate("MainWindow", "<< First"))
        self.pushButton_last.setText(_translate("MainWindow", "Last >>"))
        self.pushButton_add.setText(_translate("MainWindow", "New user"))
        self.pushButton_cancel.setText(_translate("MainWindow", "Cancel"))
        self.pushButton_save.setText(_translate("MainWindow", "Save"))
        self.menuUsers.setTitle(_translate("MainWindow", "Arquivos"))
        self.actionFile_usuarios.setText(_translate("MainWindow", "Usuários"))
 
    def OpenUserForm(self, text):
        self.mdiArea.addSubWindow(ui.subWindowUsers)
        ui.subWindowUsers.setWindowTitle(text)
        ui.subWindowUsers.show()
 
 
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_())
JayCee likes this post
Reply
#5
Hi, Axel. Your code worked perfectly. Danke schön! I appreciate your time and prompt help. Smile
Hi, Dean. Thanks a lot for your feedback!
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Interaction between Matplotlib window, Python prompt and TKinter window NorbertMoussy 3 493 Mar-17-2024, 09:37 AM
Last Post: deanhystad
Exclamation [Tkinter] Error when closing the main window with destroy TomasSanchexx 1 776 Aug-06-2023, 01:54 AM
Last Post: deanhystad
  [PyQt] How to clip layout to sides and bottom of main window? Valmont 9 4,905 Mar-24-2021, 10:00 PM
Last Post: deanhystad
  how to resize image in canvas tkinter samuelmv30 2 17,755 Feb-06-2021, 03:35 PM
Last Post: joe_momma
  "tkinter.TclError: NULL main window" Rama02 1 5,844 Feb-04-2021, 06:45 PM
Last Post: deanhystad
  [Tkinter] Hi, Keep postition of main window after iconify() delphinis 3 3,106 Jul-12-2020, 06:59 AM
Last Post: DT2000
  [Tkinter] Auto re-fit frames sizes in main window Gilush 2 2,652 Jun-06-2020, 03:14 AM
Last Post: Gilush
  [Tkinter] How to add multiple frames to main window Dandy_Don 13 7,952 Apr-29-2020, 09:21 PM
Last Post: Dandy_Don
  [PyQt] dynamically resize custom widget fill remaining space ironcthulhu 1 11,322 Dec-31-2019, 09:45 PM
Last Post: Denni
  [PySimpleGUI] error trying to resize Text element skratt 3 8,050 Dec-10-2019, 06:05 PM
Last Post: FullOfHelp

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020