《快速掌握PyQt5》第二十一章 拆分窗口QSplitter

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/La_vie_est_belle/article/details/82809883

第二十一章 拆分窗口QSplitter

21.1 示例

21.2 小结


拆分窗口中可以添加许多子控件,各个子控件通过拆分线相互分隔开来,拖动该拆分线可以随意改变子控件大小。

21.1 示例

下面我们将上一章中的QListView、QTreeView和QTableWidget放到拆分窗口中,三个视图全都只用QDirModel来显示文件目录。请看下方代码:

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QSplitter, QListView, QTreeView, QTableView, QDirModel


class Demo(QSplitter):                                          # 1
    def __init__(self):
        super(Demo, self).__init__()
        self.dir_model = QDirModel(self)                        # 2

        self.list_view = QListView(self)                        # 3
        self.tree_view = QTreeView(self)
        self.table_view = QTableView(self)
        self.list_view.setModel(self.dir_model)
        self.tree_view.setModel(self.dir_model)
        self.table_view.setModel(self.dir_model)

        self.tree_view.doubleClicked.connect(self.show_func)    # 4

        # self.setOrientation(Qt.Vertical)                      # 5
        self.addWidget(self.list_view)
        self.addWidget(self.tree_view)
        self.insertWidget(0, self.table_view)
        self.setSizes([300, 200, 200])
        print(self.count())

    def show_func(self, index):
        self.list_view.setRootIndex(index)
        self.table_view.setRootIndex(index)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    demo = Demo()
    demo.show()
    sys.exit(app.exec_())

1. 继承QSplitter;

2. 实例化QDirModel模型;

3. 分别实例化QListView、QTreeView和QTableView,然后将这三个视图的模型设为dir_model;

4. 将QTreeView的doubleClicked信号和自定义的槽函数连接起来,QtAssistant中对该信号解释如下:

所以我们知道每当双击时,被双击项的索引就会保存在index中,而这个参数会传给槽函数:

def show_func(self, index):
    self.list_view.setRootIndex(index)
    self.table_view.setRootIndex(index)

在槽函数中我们调用setRootIndex()并传入index值,也就是说,每当我们双击QTreeView中的某项时,QListView和QTableView就会将该项的索引设为自身的根索引,并显示相应的目录结构;

5. 拆分窗口默认是水平的,可以调用setOrientation(Qt.Vertical)方法将其设为垂直方向。调用addWidget()方法将视图添加到拆分窗口中。insrtWidget(int, widget)可以将控件插入到相应的位置,第一个参数为要插入的索引位置,第二个参数为控件。setSizes(iterable)可以设置各个子控件的宽度(如果拆分窗口为垂直方向的话,则该方法会设置高度)。count()方法返回拆分窗口中的控件数量。

运行截图如下:

拖动拆分线可以随意改变子控件大小:

 

21.2 小结

1. 可以把拆分拆分窗口当作一种特殊的布局管理器来使用,让界面各控件更有灵活性;

2. 要多使用QtAssistant进行查询,比如某信号是否可以传参数。

----------------------------------------------------------------------

喜欢的小伙伴可以加入这个Python QQ交流群一起学习:820934083

猜你喜欢

转载自blog.csdn.net/La_vie_est_belle/article/details/82809883