一、前言

如果表单有太多需要同时显示的字段,可以将它们排列在不同的页面中,放置在选项卡式小部件的每个选项卡下。提供了一个标签栏和一个页面区域。显示第一个选项卡下的页面,隐藏其他页面。用户可以通过单击所需的选项卡来查看任何页面。

二、学习目标

1.QTabWidget常用方法

2.QTabWidget常用信号

3.QTabWidget组件的应用

三、知识点

1.【QTabWidget常用方法】

方法

描述

addTab(widget,text)

将一个控件添加到Tab控件的选项卡中

insertTab(index,widget,icon,label)

将一个Tab控件的选项卡插入到指定的位置

removeTab(index)

根据指定的索引删除Tab控件

setCurrentIndex(index)

设置当前可见的选项卡所在的索引

setCurrentWidget(widget)

设置当前可见的界面

setTabText(index,text)

设置指定索引的选项卡的文本值。如果提供的文本包含“&”字符(“?”),则会自动为其创建快捷方式。

setTabEnabled(index,enabled)

设置指定索引的选项卡是否可用

setTabIcon(index,icon)

设置指定索引的选项卡的图标

setTabVisible(index,visible)

设置指定索引的选项卡是否可见。如果visible为true则可见;否则为false。

setTabsClosable(closeable)

设置是否将关闭按钮自动添加到每个选项卡

setTabPosition(position)

选项卡的位置由值控制

QTabWidget.North:页面上方的

QTabWidget.South:页面下方的

QTabWidget.West:页面左侧的

QTabWidget.East:页面右侧的

tabText(index)

返回页面上位置index处的选项卡的标签文本

widget(index)

返回位于索引位置index的选项卡页;如果索引超出范围,则返回None

indexOf(widget)

返回指定选项卡组件的索引值

currentIndex()

返回当前显示的选项卡的索引值

currentWidget()

返回当前显示的选项卡的组件

count()

返回选项卡的数量

isTabEnabled(index)

如果启用了位置索引页面,则返回true;否则,返回true。否则返回false

isTabVisible(index)

如果位置索引处的页面可见,则返回true;否则返回true。否则返回false

clear()

清除所有页面

2.【QTabWidget常用信号】

信号

描述

currentChanged(index)

每当当前页面索引发生变化时,触发信号

tabBarClicked(index)

单击选项卡栏时,触发信号

tabBarDoubleClicked(index)

双击选项卡栏时,触发信号

tabCloseRequested(index)

单击选项卡上的关闭按钮时,触发信号

3.【QTabWidget组件的应用】

import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTabWidget, QFormLayout, QLineEdit


class QmyWidget(QWidget):

    def __init__(self, parent=None):
        super().__init__(parent)  # 调用父类的构造函数,创建QWidget窗体
        self.setupUi()

    def setupUi(self):
        """页面初始化"""
        # 设置窗体大小及标题
        self.resize(500, 400)
        self.setWindowTitle("QTabWidget组件示例")
        # 创建布局
        self.main_layout = QVBoxLayout()

        # QTabWidget组件定义
        self.tabWidget = QTabWidget()  # 定义选项卡组件
        self.tab1 = QWidget()          # 定义tab页1
        self.setupTab1()               # 初始化新构造的tab1
        self.tab2 = QWidget()          # 定义tab页2
        self.tab3 = QWidget()          # 定义tab页3
        # QTabWidget组件设置
        self.tabWidget.addTab(self.tab1, "Tab 1")  # 将tab1添加到选项卡组件
        self.tabWidget.addTab(self.tab2, "Tab 2")  # 将tab2添加到选项卡组件
        self.tabWidget.addTab(self.tab3, "Tab 3")  # 将tab3添加到选项卡组件
        self.tabWidget.setTabsClosable(True)       # 给每个选项卡设置关闭按钮
        self.tabWidget.setTabPosition(QTabWidget.East)  # 设置选项卡的位置
        self.tabWidget.setCurrentIndex(1)           # 设置当前默认显示的tab页
        # QTabWidget绑定信号
        self.tabWidget.currentChanged.connect(self.on_tabWidget_currentChanged)

        # 将组件添加到布局中
        self.main_layout.addWidget(self.tabWidget)
        # 为窗体添加布局
        self.setLayout(self.main_layout)

    def setupTab1(self):
        """tab1页面初始化"""
        self.layout = QFormLayout()
        # 2.设置表单格式
        self.layout.setLabelAlignment(Qt.AlignLeft)
        self.layout.setFormAlignment(Qt.AlignRight)
        # 3.创建输入组件
        name_edit = QLineEdit()
        mail_edit = QLineEdit()
        # 4.为表单添加行
        self.layout.addRow("Name:", name_edit)
        self.layout.addRow("Mail:", mail_edit)
        # 5.为窗体设置表单布局
        self.tab1.setLayout(self.layout)

    def on_tabWidget_currentChanged(self, index):
        """选项卡切换槽函数"""
        print("选项卡当前切换为:{}".format(str(index)))


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