在界面设计中我们有时候需要打开多个窗口,但有时为了方便于比较数据,我们需要把多个窗口放到一个窗口中,这个时候就需要用QMdiArea()方法创建一个可以容纳多文档的窗口
方法 | 功能 |
---|
QMdiArea() | 创建一个可以容纳多窗口的对象 |
QMdiSubWindow() | 创建一个子窗口 |
setWidget() | 向窗口中添加控件 |
setWindowTitle() | 设置窗口标题 |
addSubWindow() | 把创建好的窗口添加到QMdiArea中 |
cascadeSubWindows() | 设置窗口的排列方式为重叠 |
tileSubWindows() | 设置窗口的排列方式为平铺 |
closeActiveSubWindow() | 关闭最近打开的一个窗口 |
import sys
from PyQt5.QtWidgets import *
'''
QMdiArea:用于容纳多文档
QMdiSubWindow
'''
class MultiWindowsDemo(QMainWindow):
count = 0
def __init__(self):
super(MultiWindowsDemo, self).__init__()
self.setWindowTitle("容纳多文档窗口")
self.mdi = QMdiArea()
self.setCentralWidget(self.mdi)
bar = self.menuBar()
file = bar.addMenu("File")
file.addAction("New")
file.addAction("cascade")
file.addAction("Tiled")
file.addAction("close")
file.triggered.connect(self.window)
def window(self, q):
if q.text() == 'New':
MultiWindowsDemo.count = MultiWindowsDemo.count + 1
sub = QMdiSubWindow()
sub.setWidget(QRadioButton("QMdiArea"))
sub.setWindowTitle("子窗口" + str(MultiWindowsDemo.count))
self.mdi.addSubWindow(sub)
sub.show()
if q.text() == "cascade":
self.mdi.cascadeSubWindows()
elif q.text() == 'Tiled':
self.mdi.tileSubWindows()
elif q.text() == "close":
self.mdi.closeActiveSubWindow()
if __name__ == "__main__":
app = QApplication(sys.argv)
main = MultiWindowsDemo()
main.show()
sys.exit(app.exec_())