如何使用 qtDesigner 将子窗口停靠在 pyqt5 的 MDI 区域中

我正在尝试在 pyqt5 的 MDI 区域中创建一个子窗口,使用 .ui 文件作为我的主窗口。当我触发显示子窗口的操作时,它显示为一个单独的窗口(未按预期停靠在 MDI 区域中)。我已经尝试通过本教程 ( codeloop.org MDI Area Tutorial ) 添加子窗口并且它工作正常,但我无法通过加载 .ui 文件来复制它。

app.py

import os

import sys

from PyQt5 import QtCore, QtWidgets, uic


scriptPath = os.path.dirname(os.path.realpath(__file__))

uiFile = scriptPath + '\\' + 'mainwindow.ui'


class MainWindow(QtWidgets.QMainWindow):

    def __init__(self, *args, **kwargs):

        super(MainWindow, self).__init__(*args, **kwargs)

        self.initUI()

    def initUI(self):

        #load the UI page

        self.ui_main = uic.loadUi(uiFile, self)

        self.action1.triggered.connect(lambda: self.fileBarTrig('test'))

    def fileBarTrig(self,p):

        print(p)

        self.subwindow.show()

        self.mdiArea.tileSubWindows()


def main():

    app = QtWidgets.QApplication(sys.argv)

    main = MainWindow()

    main.show()

    sys.exit(app.exec_())


if __name__ == '__main__':

    main()

app.py 与未停靠的子窗口一起运行


http://img4.mukewang.com/63b4f37600014cea09610634.jpg

森林海
浏览 337回答 1
1回答

MMTTMM

似乎这是一个错误,或者至少是容量不足,没有在 QMdiArea 中插入小部件,如果分析 pyuic5 生成的代码就可以看出这一点。所以解决方案是将小部件添加到 QMdiArea:import osimport sysfrom PyQt5 import QtCore, QtWidgets, uicscriptPath = os.path.dirname(os.path.realpath(__file__))uiFile = os.path.join(scriptPath, "mainwindow.ui")class MainWindow(QtWidgets.QMainWindow):    def __init__(self, *args, **kwargs):        super(MainWindow, self).__init__(*args, **kwargs)        self.initUI()    def initUI(self):        # load the UI page        self.ui_main = uic.loadUi(uiFile, self)        self.action1.triggered.connect(lambda: self.fileBarTrig("test"))    def fileBarTrig(self, p):        sw1 = self.mdiArea.addSubWindow(self.subwindow)        sw1.show()        sw2 = self.mdiArea.addSubWindow(self.subwindow_2)        sw2.show()        self.mdiArea.tileSubWindows()def main():    app = QtWidgets.QApplication(sys.argv)    main = MainWindow()    main.show()    sys.exit(app.exec_())if __name__ == "__main__":    main()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python