Qt MDI 应用程序与 QtDesigner 自定义 UI

0 投票
1 回答
1516 浏览
提问于 2025-04-17 15:25

假设我有两个来自Qt Designer的UI文件:mainform.ui里存储了mdiArea,而figureslist.ui里存储了listView。

现在我想创建一个mdi应用程序,可以打开多个figureList窗口。

import sys
from PyQt4 import QtGui
#from PyQt4.QtGui import *
from PyQt4 import QtCore, QtGui, uic

class HelloWorldApplication(QtGui.QApplication):
    def __init__(self, args):
        QtGui.QApplication.__init__(self, args)
        self.maindialog = MainUI(None)

class MainUI(QtGui.QMainWindow):
    def __init__(self, parent):
        QtGui.QMainWindow.__init__(self, parent)

        self.ui = uic.loadUi("mainform.ui")
        self.ui.show()

        # create child and show it
        child = self.createFiguresListView()

        # problem here (*)
        child.show()

    def createFiguresListView(self):
        child = FiguresListView()
        self.ui.mdi.addSubWindow(child)
        return child

class FiguresListView(QtGui.QWidget):
    def __init__(self):
        super(FiguresListView, self).__init__()
        self.ui = uic.loadUi("figureslist.ui")


app = HelloWorldApplication(sys.argv)
sys.exit(app.exec_())

但是不幸的是,我的子窗口显示得很小,没有figureslist.ui里描述的布局,虽然它的确是个mdi子窗口。如果我把标记为(*)的代码换成child.ui.show(),它就会显示出实际的布局,但就不再像mdi子窗口那样工作了。

这是怎么回事呢?

1 个回答

0

你忘了给这个界面设置父级了(另外,如果你在设计器里没有设置最小大小,你需要在这里设置):

class FiguresListView(QtGui.QWidget):
    def __init__(self):
        super(FiguresListView, self).__init__()
        self.ui = uic.loadUi("figureslist.ui", self)
        #self.setMinimumSize(400, 200)

撰写回答