104.PyQt5_QTabWidget_选项卡窗口框控件

本文详细介绍了PyQt5中的QTabWidget和QTabBar组件,包括它们的基本用法、功能设置、选项卡管理以及信号和槽的使用。QTabWidget是一个包含选项卡和对应页面的容器,常用于构建带有多个视图的应用界面。通过示例代码展示了如何创建、添加、设置选项卡以及处理用户交互事件。
摘要由CSDN通过智能技术生成

在这里插入图片描述

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

在这里插入图片描述

QTabBar 类
  • QTabBar基础
    • QTabBar 类直接继承自 QWidget。该类提供了一个选项卡栏
    • 通过addTab()可以为选项卡栏添加选项卡,但是并没有为每个选项卡提供相应的页面
    • 要使选项卡栏实际可用,需要自行为每个选项卡设置需要显示的页面,可以通过 QStackedLayout 布局为选项卡提供页面
    • PyQt 也提供了一个现成的选项卡部件 QTabWidget
    • 在这里插入图片描述
QTabWidget 选项卡窗口框控件
  • 描述
    • QTabWidget控件提供了一个选项卡和一个页面区域,默认显示第一个选项卡的页面,通过单击各选项卡可以查看对应的界面
    • 如果在一个窗口中显示的输入字段很多,则可以对这些字段进行拆分,分别放置在不同界面的选项卡中
    • 该类提供了一个选项卡栏(QTabBar)和一个相应的页面区域,用于显示与每个选项卡相对应的页面。 与 QStackedLayout 布局原理相同
    • QTabWidget 类的大部分功能由 QTabBar(主要处理选项卡部分)和 QStackedWidget(主要处理组织页面的功能)提供
    • 个人理解:QTabWidget是一个放置设置了显示页面的QTabBar 的容器
  • 继承自:QWidget
  • 使用步骤
    • 1、创建一个 QTabWidget
    • 2、为每个选项卡创建一个页面(容器),通常为 QWidget(不要指定父控件)
    • 3、把子部件插入到页面部件(即容器)中
    • 4、使用 addTab()或 insertTab()把页面部件放入选项卡部件
    • 5、若容器中的内容不可见,则使用 resize()函数设置 QTabWidget 的大小使其可见
  • 功能作用
    • 构造函数
      QTabWidget(parent)                          # 创建QTabWidget对象的同时设置父对象
      
    • 添加选项卡
      addTab(QWidget, str) -> int                 # 添加选项卡到最后,并添加控件到选项卡的同时设置选项卡标题,返回选项卡索引
      addTab(QWidget, QIcon, str) -> int          # 添加选项卡到最后,并添加控件到选项卡的同时设置选项卡图标和标题,返回选项卡索引
      
      insertTab(int, QWidget, str) -> int         # 在指定索引位置插入选项卡,并添加控件到选项卡的同时设置选项卡标题,返回选项卡索引
      insertTab(int, QWidget, QIcon, str) -> int  # 在指定索引位置插入选项卡,并添加控件到选项卡的同时设置选项卡图标和标题,返回选项卡索引
      
    • 选项卡设置
      setTabPosition(TabPosition)        # 设置选项卡位置
      # 参数 QTabWidget.TabPosition
          # QTabWidget.North              # 0,选项卡显示在上方
          # QTabWidget.South	            # 1,选项卡显示在下方
          # QTabWidget.West               # 2,选项卡显示在左侧
          # QTabWidget.East	            # 3,选项卡显示在右侧
      
      setTabShape(TabShape)               # 设置选项卡形状
      # 参数 QTabWidget.TabShape
          # QTabWidget.Rounded            # 0,丰满的,尖角
          # QTabWidget.Triangular         # 2,三角柱,圆角
      
      setTabText(index, str)              # 设置指定索引选项卡显示文本
      setTabsClosable(bool)               # 设置是否显示选项卡上的关闭按钮
      setMovable(bool)                    # 设置选项卡是否可以移动
      setTabIcon(index, QIcon)            # 给指定索引选项卡设置图标
      setIconSize(QSize)                  # 统一设置选项卡图标大小
      setUsesScrollButtons(bool)          # 设置是否显示选项卡滚动箭头控件
      setTabBarAutoHide(bool)             # 设置选项卡数量少于2个时是否自动隐藏选项卡栏
      
      setElideMode(Qt.TextElideMode)      # 设置选项卡省略文本中省略号“…”的位置
      # 参数 Qt.TextElideMode
          # Qt.ElideLeft         # 0,省略号出现在文本的左侧
          # Qt.ElideRight        # 1,省略号出现在文本的右侧
          # Qt.ElideMiddle       # 2,省略号出现在文本的中间
          # Qt.ElideNone         # 3,显示文本中不出现省略号
      
      • 在这里插入图片描述
    • 移除选项卡
      removeTab(index)                    # 移除指定索引选项卡
      
    • 隐藏选项卡
      hide()                              # 隐藏选项卡
      setVisible(bool)                    # 设置选项卡是否可见
      
    • 选项卡是否可用
      setTabEnabled(index, bool)          # 设置选项卡是否可用
      
    • 当前选项卡设置
      setCurrentIndex(index)              # 设置指定索引选项卡为当前选项卡
      currentIndex()> int               # 获取当前选项卡的索引
      
      setCurrentWidget(QWidget)           # 设置添加了指定控件的选项卡为当前选项卡
      currentWidget() -> QWidget          # 获取当前选项卡内添加的QWidget控件
      
    • 选项卡个数
      count()                             # 获取选项卡的数量
      
    • 设置适合文档页面的模式
      setDocumentMode(bool)               # 设置是否以适合文档页面的模式呈现
      # documentMode属性为True时,不会呈现选项卡部件框架,即选项卡页面和其后的窗口等页面无框架区分看起来是一个整体
      
      • 在这里插入图片描述
  • 可用信号
    currentChanged(int index)           # 当前选项卡发生更改时发送此信号,发射新选项卡的索引
                                        # 若没有新的索引,则为−1(比如 QTabBar 中没有选项卡)。该信号比较重要。
    tabBarClicked(int index)            # 单击选项卡时发送此信号,发射被点击选项卡的索引
    tabBarDoubleClicked(int index)      # 双击选项卡时发送此信号,发射被点击选项卡的索引
                                        # 若光标下没有选项卡,则为−1。
    tabCloseRequested(int index)        # 当点击选项卡上的关闭按钮时发送此信号,发射关闭的选项卡的索引
    

  • 示例代码
  • 示例1:QTabWidget-功能演示
    from PyQt5.Qt import *
    import sys
    
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QTabWidget-功能演示')
            self.resize(810, 810)
            self.widget_list()
    
        def widget_list(self):
            tbw1 = QTabWidget(self)
            tbw2 = QTabWidget(self)
            tbw3 = QTabWidget(self)
            tbw4 = QTabWidget(self)
    
            tbw1.setGeometry(0, 0, 400, 400)
            tbw2.setGeometry(410, 0, 400, 400)
            tbw3.setGeometry(0, 410, 400, 400)
            tbw4.setGeometry(410, 410, 400, 400)
    
            w11 = QWidget()
            w12 = QWidget()
            w21 = QWidget()
            w22 = QWidget()
            w31 = QWidget()
            w32 = QWidget()
            w41 = QWidget()
            w42 = QWidget()
    
            # 添加选项卡/插入选项卡
            tbw1.addTab(w11, '选项卡11')
            tbw1.insertTab(0, w12, '选项卡12')
            tbw2.addTab(w21, '选项卡21')
            tbw2.insertTab(0, w22, '选项卡22')
            tbw3.addTab(w31, '选项卡31')
            tbw3.insertTab(0, w32, '选项卡32')
            tbw4.addTab(w41, '选项卡41')
            tbw4.insertTab(0, w42, '选项卡42')
    
            # 设置选显卡显示位置
            tbw1.setTabPosition(QTabWidget.North)
            tbw2.setTabPosition(QTabWidget.South)
            tbw3.setTabPosition(QTabWidget.West)
            tbw4.setTabPosition(QTabWidget.East)
    
            # 设置选项卡形状
            tbw1.setTabShape(QTabWidget.Rounded)
            tbw2.setTabShape(QTabWidget.Triangular)
            tbw3.setTabShape(QTabWidget.Triangular)
            tbw4.setTabShape(QTabWidget.Rounded)
    
            # 设置选项卡显示文本
            tbw1.setTabText(0, '测试修改选项卡文本显示超级长的名字10')
            tbw1.setTabText(1, '测试修改选项卡文本显示超级长的名字11')
            tbw2.setTabText(0, '测试修改选项卡文本显示超级长的名字20')
            tbw2.setTabText(1, '测试修改选项卡文本显示超级长的名字21')
            tbw3.setTabText(0, '测试修改选项卡文本显示超级长的名字30')
            tbw3.setTabText(1, '测试修改选项卡文本显示超级长的名字31')
            tbw4.setTabText(0, '测试修改选项卡文本显示超级长的名字40')
            tbw4.setTabText(1, '测试修改选项卡文本显示超级长的名字41')
    
            # 设置选项卡省略文本中省略号“…”的位置
            tbw1.setElideMode(Qt.ElideLeft)
            tbw2.setElideMode(Qt.ElideRight)
            tbw3.setElideMode(Qt.ElideMiddle)
            tbw4.setElideMode(Qt.ElideNone)
    
            # 其他设置
            tbw1.setTabsClosable(True)                              # 设置是否显示选项卡上的关闭按钮
            tbw2.setMovable(True)                                   # 设置选项卡是否可以移动
            tbw3.setTabIcon(1, QIcon('../images/bmp/212.bmp'))      # 给指定索引选项卡设置图标
            tbw3.setIconSize(QSize(15, 15))                         # 统一设置选项卡图标大小
            tbw4.setUsesScrollButtons(False)                        # 设置是否显示选项卡滚动箭头控件
    
            # 设置当前显示选项卡
            tbw1.setCurrentIndex(0)
            tbw2.setCurrentIndex(1)
            tbw3.setCurrentWidget(w31)
            tbw4.setCurrentWidget(w42)
    
            # 设置适合文档页面的模式
            tbw1.setDocumentMode(True)
            tbw2.setDocumentMode(False)
            tbw3.setDocumentMode(False)
            tbw4.setDocumentMode(True)
    
            # 设置选项卡数量少于2个时是否自动隐藏选项卡栏
            tbw2.setTabBarAutoHide(True)
    
            def doubleclick_test(index):
                print(f'tbw2的{index}索引选项卡被双击了')
                tbw2.removeTab(index)
    
            # 点击选项卡关闭按钮发射信号
            tbw1.tabCloseRequested.connect(lambda index: print(f'tbw1的{index}索引选项卡关闭按钮被点击了'))
            # 选项卡双击发射信号
            tbw2.tabBarDoubleClicked.connect(doubleclick_test)
    
            # 选项卡单击发射信号
            tbw3.tabBarClicked.connect(lambda index: print(f'tbw3的{index}索引选项卡被单击了'))
    
            # 当前选项卡发生改变时发射信号
            tbw4.currentChanged.connect(lambda index: print(f'当前选项卡发生了改变,新索引号为:{index}'))
    
    
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
    
  • 效果图
    • 在这里插入图片描述
  • 示例2:QTabWidget-实战演示
    from PyQt5.Qt import *
    import sys
    
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QTabWidget-实战演练')
            self.resize(500, 300)
            self.widget_list()
    
        def widget_list(self):
            self.tabw = QTabWidget()
            nav_w = QWidget()
    
            btn1 = QPushButton('主页')
            btn2 = QPushButton('简介')
            btn3 = QPushButton('联系')
            btn4 = QPushButton('地址')
    
            btn1.setObjectName('btn1')
            btn2.setObjectName('btn2')
            btn3.setObjectName('btn3')
            btn4.setObjectName('btn4')
    
            vlayout = QVBoxLayout()
            vlayout.addWidget(btn1)
            vlayout.addWidget(btn2)
            vlayout.addWidget(btn3)
            vlayout.addWidget(btn4)
            nav_w.setLayout(vlayout)
    
            w1 = QWidget()
            w2 = QWidget()
            w3 = QWidget()
            w4 = QWidget()
    
            QLabel('主页', w1).move(100, 100)
            QLabel('简介', w2).move(100, 100)
            QLabel('联系', w3).move(100, 100)
            QLabel('地址', w4).move(100, 100)
    
            self.tabw.addTab(w1, '主页')
            self.tabw.addTab(w2, '简介')
            self.tabw.addTab(w3, '联系')
            self.tabw.addTab(w4, '地址')
    
            hlayout = QHBoxLayout()
            hlayout.addWidget(nav_w)
            hlayout.addWidget(self.tabw)
    
            self.setLayout(hlayout)
    
            QMetaObject.connectSlotsByName(self)
    
        def on_btn1_clicked(self):
            self.tabw.setCurrentIndex(0)
    
        def on_btn2_clicked(self):
            self.tabw.setCurrentIndex(1)
    
        def on_btn3_clicked(self):
            self.tabw.setCurrentIndex(2)
    
        def on_btn4_clicked(self):
            self.tabw.setCurrentIndex(3)
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
  • 效果图
    • 在这里插入图片描述
  • 示例3:优化示例2-隐藏QTabBar
  • 通过 self.tabw.tabBar().hide() 隐藏选项卡栏
    from PyQt5.Qt import *
    import sys
    
    
    class Windows(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle('QTabWidget-实战演练')
            self.resize(500, 300)
            self.widget_list()
    
        def widget_list(self):
            self.tabw = QTabWidget()
            nav_w = QWidget()
    
            btn1 = QPushButton('主页')
            btn2 = QPushButton('简介')
            btn3 = QPushButton('联系')
            btn4 = QPushButton('地址')
    
            btn1.setObjectName('btn1')
            btn2.setObjectName('btn2')
            btn3.setObjectName('btn3')
            btn4.setObjectName('btn4')
    
            vlayout = QVBoxLayout()
            vlayout.addWidget(btn1)
            vlayout.addWidget(btn2)
            vlayout.addWidget(btn3)
            vlayout.addWidget(btn4)
            nav_w.setLayout(vlayout)
    
            w1 = QWidget()
            w2 = QWidget()
            w3 = QWidget()
            w4 = QWidget()
    
            QLabel('主页', w1).move(100, 100)
            QLabel('简介', w2).move(100, 100)
            QLabel('联系', w3).move(100, 100)
            QLabel('地址', w4).move(100, 100)
    
            self.tabw.addTab(w1, '主页')
            self.tabw.addTab(w2, '简介')
            self.tabw.addTab(w3, '联系')
            self.tabw.addTab(w4, '地址')
    
            hlayout = QHBoxLayout()
            hlayout.addWidget(nav_w)
            hlayout.addWidget(self.tabw)
    
            self.setLayout(hlayout)
    
            self.tabw.tabBar().hide()
    
            QMetaObject.connectSlotsByName(self)
    
        def on_btn1_clicked(self):
            self.tabw.setCurrentIndex(0)
    
        def on_btn2_clicked(self):
            self.tabw.setCurrentIndex(1)
    
        def on_btn3_clicked(self):
            self.tabw.setCurrentIndex(2)
    
        def on_btn4_clicked(self):
            self.tabw.setCurrentIndex(3)
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        window = Windows()
    
        window.show()
        sys.exit(app.exec_())
    
    
  • 效果图
    • 在这里插入图片描述
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失心疯_2023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值