首页 > 解决方案 > 如何在 MDI 区域中显示子窗口?

问题描述

所以我对 MDI 区域进行了一些测试,问题是当我尝试在 MDI 中打开子窗口时会发生这种情况。

地狱般的小子窗口

有什么方法可以让小子窗口变得足够大以便可读吗?

我在一个唯一的测试文件中做所有事情。

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(488, 392)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(280, 290, 91, 51))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_3.clicked.connect(self.Open)
        self.mdiArea = QtWidgets.QMdiArea(self.centralwidget)
        self.mdiArea.setGeometry(QtCore.QRect(60, 20, 261, 211))
        self.mdiArea.setObjectName("mdiArea")
        self.subwindow = QtWidgets.QWidget()
        self.subwindow.setObjectName("subwindow")
        self.pushButton = QtWidgets.QPushButton(self.subwindow)
        self.pushButton.setGeometry(QtCore.QRect(100, 80, 56, 17))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 488, 18))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

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

    def Open(self):
        self.mdiArea.addSubWindow(self.subwindow)
        self.subwindow.show()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton_3.setText(_translate("MainWindow", "Open"))
        self.subwindow.setWindowTitle(_translate("MainWindow", "Subwindow"))
        self.pushButton.setText(_translate("MainWindow", "YAY!"))

class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

app = QtWidgets.QApplication([])
application = mywindow()
application.show()
app.exec()

标签: pythonpyqtpyqt5

解决方案


您必须调整 QMdiSubWindow 的大小:

def Open(self):
    sw = self.mdiArea.addSubWindow(self.subwindow)
    self.subwindow.show()
    sw.resize(640, 480)

推荐阅读