Bootstrap

29-容器和容器控件-切换卡控件QTabWidget

切换卡控件QTabWidget

QTabBar

切换卡控件QTabWidget 由多页卡片构成,每页卡片就是一个窗口(QWidget)。

可以将不同的控件放到不同的卡片上,这样可以节省界面资源。切换卡控件的外观如图所示,当无法显示全部卡片时,可单击右上角显示滚动按钮。

切换卡控件继承自QWidget。用QTabWidget类创建实例对象的方法如下所示,其中parent 是窗口或者容器类控件。

from PySide6.QtWidgets import QTabWidget

QTabWidget(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None)-> None 

选项卡小部件提供一个选项卡栏(请参阅)和一个"页面区域",用于显示与每个选项卡相关的页面。默认情况下,选项卡栏显示在页面区域上方,但可以使用不同的配置(请参阅)。每个选项卡都与不同的小部件(称为页面)相关联。页面区域中仅显示当前页面;所有其他页面均处于隐藏状态。用户可以通过单击其选项卡或按其 Alt+字母 快捷方式(如果有)来显示不同的页面。TabPosition

切换卡控件QTabWidget官方说明

../../_images/windows-tabwidget.png

选项卡小部件提供了一个选项卡栏(请参阅QTabBar)和一个“页面区域”,用于显示与每个选项卡相关的页面。默认情况下,选项卡栏显示在页面区域上方,但可以使用不同的配置(请参阅TabPosition)。每个选项卡都与一个不同的小部件(称为页面)相关联。页面区域中只显示当前页面;所有其他页面都被隐藏。用户可以通过单击选项卡或按Alt+字母快捷键(如果有)来显示不同的页面。

使用QTabWidget的正常方法是执行以下操作:

  • 创建一个QTabWidget。
  • 为选项卡对话框中的每个页面创建一个QWidget,但不要为它们指定父窗口小部件。
  • 将子窗口小部件插入页面窗口小部件,使用布局将其正常定位。
  • 调用addTab()或insertTab()将页面小部件放入选项卡小部件中,为每个选项卡提供一个合适的标签和一个可选的键盘快捷键。

选项卡的位置由tabPosition定义,其形状由tabShape定义。

当用户选择页面时,会发出信号currentChanged()。

当前页面索引可用currentIndex(),即带有currentWidget()的当前页面小部件。您可以使用widget()检索指向具有给定索引的页面小部件的指针,并可以使用indexOf()查找小部件的索引位置。使用setCurrentWidget()或setCurrentIndex()来显示特定页面。
您可以使用setTabText()或setTabIcon()更改选项卡的文本和图标。可以使用removeTab()删除选项卡及其关联的页面。

每个选项卡在任何给定时间都是启用或禁用的(请参见setTabEnabled())。如果启用了某个选项卡,则会正常绘制选项卡文本,用户可以选择该选项卡。如果禁用了该选项卡,则以不同的方式绘制该选项卡,并且用户无法选择该标签。请注意,即使禁用了某个标签,页面仍然可见,例如,如果所有标签都恰好被禁用。

选项卡小部件是拆分复杂对话框的一种非常好的方法。另一种选择是使用QStackedWidget,为其提供一些在页面之间导航的方法,例如QToolBar或QListWidget。

QTabWidget中的大部分功能由QTabBar(位于顶部,提供选项卡)和QStackedWidget(大部分区域,组织单个页面)提供。

切换卡控件QTabWidget 的属性

常量描述访问功能
count此属性保存选项卡栏中的选项卡数。
默认情况下,此属性包含值0。
count()
currentIndex此属性保存当前选项卡页的索引位置。
如果没有当前小部件,则当前索引为-1。
默认情况下,此属性包含值-1,因为小部件中最初没有选项卡。
currentIndex()
setCurrentIndex(index)
Signal currentChanged(index)
documentMode此属性保存选项卡小部件是否以适合文档页面的模式呈现。这与macOS上的文档模式相同。
设置此属性后,不会呈现选项卡小部件框架。此模式对于显示文档类型的页面非常有用,其中页面覆盖了大部分选项卡小部件区域。
documentMode()
setDocumentMode(set)
elideMode此属性保存如何在选项卡栏中删除文本。
此属性控制当没有足够的空间来显示给定选项卡栏大小时如何省略项目。
默认情况下,该值取决于样式。
elideMode()

setElideMode(mode)
iconSize此属性保存标签栏中图标的大小。
默认值与样式相关。这是图标的最大尺寸。如果图标尺寸较小,则不会按比例放大。
iconSize()
setIconSize(size)
movable此属性保存用户是否可以在tabbar区域内移动选项卡。
默认情况下,此属性为false;
isMovable()
setMovable(movable)
tabBarAutoHide如果为true,此属性将保留,当标签栏包含少于2个标签时,标签栏将自动隐藏。
默认情况下,此属性为false。
tabBarAutoHide()
setTabBarAutoHide(enabled: bool)
tabPosition此属性保存此选项卡小部件中选项卡的位置。
TabPosition枚举描述了此属性的可能值。
默认情况下,此属性设置为North。
tabPosition()
setTabPosition(position)
tabShape此属性保存此选项卡小部件中的选项卡的形状。
此属性的可能值为四舍五入(默认)或三角形。
tabShape()setTabShape(s)
tabsClosable此属性保存关闭按钮是否自动添加到每个选项卡。tabsClosable()
setTabsClosable(closeable)
usesScrollButtons此属性保留当标签栏有许多标签时,标签栏是否应该使用按钮来滚动标签。
当标签栏中的标签太多而无法显示其大小时,标签栏可以选择扩展其大小或添加允许您滚动浏览标签的按钮。
默认情况下,该值取决于样式。
usesScrollButtons()
setUsesScrollButtons(useButtons)

切换卡控件QTabWidget 的常用方法

正常使用方法是执行以下操作:

  • 创建一个QTabWidget

  • 为选项卡对话框中的每个页面创建一个QWidget,但不为它们指定父小部件。

  • 将子小部件插入到页面小部件中,使用布局将它们正常定位。

  • 调用 addTab()或 insertTab()将页面小部件放入选项卡小部件中,为每个选项卡提供带有可选键盘快捷键的合适标签。

制表符的位置由tabPosition定义,形状由tabShape定义。

当用户选择一个页面时,会触发信号currentChanged()。

当前页面索引可用为currentIndex(),即带有currentWidget()的当前页面小部件。您可以使用widget()检索具有给定索引的页面小部件的指针,并且可以使用indexOf()查找小部件的索引位置。使用setCurrentWidget()或setCurrentIndex()来显示特定的页面。

可以使用setTabText()或setTabIcon()更改标签的文本和图标。可以使用removeTab()删除选项卡及其关联页面。

每个选项卡在任何给定时间都是启用或禁用的(参见setTabEnabled())。如果一个选项卡被启用,选项卡文本将正常绘制,用户可以选择该选项卡。如果禁用该选项卡,则该选项卡将以不同的方式绘制,并且用户无法选择该选项卡。注意,即使一个选项卡被禁用,页面仍然是可见的,例如,如果所有的选项卡都被禁用。

标签小部件是拆分复杂对话框的好方法。另一种方法是使用QStackedWidget,为其提供一些在页面之间导航的方法,例如QToolBar或QListWidget。

QTabWidget中的大部分功能是由QTabBar(在顶部,提供选项卡)和QStackedWidget(大部分区域,组织各个页面)提供的。

切换卡控件QTabWidget 的常用方法如表所示主要方法介绍如下。

切换卡的每页卡片都是一个窗口(QWidget)或者从QWidget继承的可视化子类因此添加卡片时,需要实例化的QWidget。

  • QTabWidget 添加卡片的方法是 addTab(QWidget,label:str)和 addTab(QWidget,QIcon,label:str)

    • QWidger 是继承自QWidget 的实例
    • label是卡片标题的名称,可以在名称中添加"&"和字母设置快捷键;
    • QIcon 是卡片的图标,
    • 卡片的索引从0开始。
  • 在某个位置插入卡片用insertTab(index; int,QWidget,label: str)和 insertTab(index: int,QWidget,QIcon,str)方法;

  • 删除所有卡片用clear()方法;

  • 删除索引号是int 的卡片用removeTab(index:int)方法;

  • 卡片标题可以用setTabText(index:int,str)方法设置,其中参数index是卡片的索引。

  • 卡片标题栏可以放到上、下左、右位置

    • 卡片标题的位置用setTabPosition(QTabWidget.TabPosition)方法设置,其中参数 QTabWidget.TabPosition 可以取:

      PySide6.QtWidgets.QTabWidget.TabPosition 此枚举类型定义QTabWidget绘制选项卡行的位置:

      ConstantDescription
      QTabWidget.North选项卡绘制在页面上方。
      QTabWidget.South选项卡绘制在页面下方。
      QTabWidget.West选项卡绘制在页面的左侧。
      QTabWidget.East选项卡绘制在页面的右侧。
  • 标题栏的位置如图所示

    • 可以用tabPosition()方法获取标题栏的位置。
  • 卡片标题栏的形状

    • 用setTabShape(QTabWidget.TabShape)方法定义,其中参数QTabWidget.TabShape可以取 :

      PySide6.QtWidgets.QTabWidget.TabShape 此枚举类型定义选项卡的形状:

      ConstantDescription
      QTabWidget.Rounded选项卡以圆形外观绘制。这是默认形状。
      QTabWidget.Triangular选项卡以三角形外观绘制。
    • 用tabShap()方法可以获取标题栏的形状。

  • 如果显示标题栏文字的空间不足,可以用省略号来表示。

    • 用setElideMode(Qt.TextElideMode)方法设置卡片标题栏文字在显示空间不足时的省略号显示方式,其中参数 Qt.TextElideMode 可以取:

      PySide6.QtCore.Qt.TextElideMode 此枚举指定在显示不适合的文本时省略号应出现的位置:

      ConstantDescription
      Qt.ElideLeft省略号应该出现在文本的开头。
      Qt.ElideRight省略号应该出现在文本的末尾。
      Qt.ElideMiddle省略号应该出现在文本的中间。
      Qt.ElideNone文本中不应出现省略号。

      Qt::ElideMiddle通常是URL最合适的选择(例如,“http://bugreports.qt…/QTWEBSITE-13/”),而Qt::ElideRight适用于其他字符串(例如,“在Ma上部署应用程序…”)。

  • 当卡片较多时,父窗口中无法显示出所有的卡片标题,这时可以用滚动条来显示出被隐藏的卡片。

    • 用setUsesScrollButtons(bool)方法设置是否有滚动按钮。每页卡片显示时,默认为有框架并呈立体形状显示在父窗口上。
    • 用setDocumentMode(bool)方法设置卡片是否有框架,如果没有框架,则卡片上内容与父窗口看起来是一个整体。
  • 当setTabsClosable(bool)为 True 时,卡片的标题栏上显示关闭标识,单击该关闭标识,可发送tabCloseRequested(int)信号。

  • 用setCornerWidget(QWidget, PySide6.QtCore.Qt.Corner)方法可以在 QTabWidget 的右上角下角、左上角和左下角处放置控件,例如放置标签、单击按钮等,其中参数PySide6.QtCore.Qt.Corner 可以取:

    PySide6.QtCore.Qt.Corner 此枚举类型指定矩形中的角点:

    ConstantDescription
    Qt.TopLeftCorner矩形的左上角。
    Qt.TopRightCorner矩形的右上角。
    Qt.BottomLeftCorner矩形的左下角。
    Qt.BottomRightCorner矩形的右下角。

    用cornerWidget(Qt.Corner)方法可以获取角上的控件

  • 用setTabBarAutoHide(bool)方法可以设置当只有1张卡片时,卡片标题是否自动隐藏。

枚举值

  • PySide6.QtWidgets.QTabWidget.TabPosition

    这个枚举类型定义了QTabWidget在哪里绘制选项卡行:

    ConstantDescription
    QTabWidget.North标签画在页面上方。
    QTabWidget.South标签画在页面下方。
    QTabWidget.West标签被画在页面的左边。
    QTabWidget.East标签被画在页面的右边。
  • PySide6.QtWidgets.QTabWidget.TabShape

    这个枚举类型定义了制表符的形状

    ConstantDescription
    QTabWidget.Rounded标签以圆形外观绘制。这是默认的形状。
    QTabWidget.Triangular标签被画成三角形。
QTabWidget的方法及参数类型返回值的类型说 明
addTab(QWidget,label:str)int在末尾添加新卡片
addTab(QWidget,QIcon,label: str)int在末尾添加新卡片
insertTab(index: int,QWidget,label: str)int在索引int处插入卡片
insertTab(index: int,QWidget,QIcon,str)int在索引int处插入卡片
widget(index:int)QWidget根据索引获取卡片窗口
clear()None清空所有卡片
count()int获取卡片数量
indexOf(QWidget)int获取窗口对应的卡片索引号
removeTab(index: int)None根据索引移除卡片
setCornerWidget(QWidget,Qt.Corner)None在角上设置控件
cornerWidget(Qt.Corner)QWidget获取角位置处的控件
[slot]setCurrentIndex(index: int)None将索引设置为当前卡片
currentIndex()int获取当前卡片的索引号
[slot]setCurrentWidget(QWidget)None将窗口控件是 QWidget的卡片设置成当前卡片
currentWidget()QWidget获取当前卡片的窗口
setDocumentMode(bool)None设置卡片是否为文档模式
documentMode()bool获取卡片是否为文档模式
setElideMode(Qt.TextElideMode)None设置卡片标题是否为省略模式
setlconSize(QSize)None设置卡片图标的尺寸
iconSize()QSize获取卡片图标的尺寸
setMovable(bool)None设置卡片之间是否可以交换位置
isMovable()bool获取卡片是否可以交换位置
tabBar()PySide6.QtWidgets.QTabBar返回当前的QTabBar。
setTabBarAutoHide(bool)None设置卡片标题是否自动隐藏
tabBarAutoHide()bool获取标题是否可以自动隐藏
setTabEnabled(index:int,bool)None设置是否将索引为int的卡片激活
isTabEnabled(index:int)bool获取索引为int的卡片是否激活
setTabIcon(index:int,QIcon:PySide6.QtGui.QIcon)None设置索引为int的卡片的图标
tabIcon(index:int)QIcon获取索引为int的卡片的图标
setTabPosition(QTabWidget.TabPosition)None设置标题栏的位置
setTabShape(QTabWidget.TabShape)None设置标题栏的形状
setTabText(index:int,str)None根据索引设置卡片的标题名称
tabText(index:int)str获取卡片标题的名称
setTabToolTip(index:int,str)None根据索引设置卡片的提示信息
tabToolTip(index:int)Str获取卡片的提示信息
setTabVisible(bool)None设置切换卡是否显示
setTabWhatsThis(index:int,text:str)None将页面index位置的What’s This帮助文本设置为text
setTabsClosable(bool)None设置卡片标题上是否有关闭标识
tabsClosable()bool获取卡片是否可以关闭
setUsesScrollButtons(bool)None设置是否有滚动按钮
usesScrollButtons()bool获取是否有滚动按钮

切换卡控件QTabWidget的信号

切换卡控件QTabWidget的信号如表所示

QTabWidget 的信号及参数类型说明
currentChanged(index: int)当前卡片改变时发送信号
tabBarClicked(index:int)单击卡片的标题时发送信号
tabBarDoubleClicked(index: int)双击卡片的标题时发送信号
tabCloseRequested(index: int)单击卡片的关闭标识时发送信号

切换卡标签栏QTabBar

QTabBar类提供了一个标签栏,例如在标签对话框中使用。

from PySide6.QtWidgets import QTabBar

QTabBar(parent: Union[PySide6.QtWidgets.QWidget,NoneType] = None)-> None

用给定的.parent创建一个新的标签栏

QTabBar易于使用; 它使用预定义的形状之一绘制选项卡,并在选择选项卡时发出信号。它可以被分类以定制外观和感觉。Qt还提供了现成的QTabWidget。

每个选项卡都有tabText()、可选tabIcon()、可选tabToolTip()、可选tabWhatsThis()和可选tabData()。选项卡的属性可以使用setTabText()、setTabIcon()、setTabToolTip()、setTabWhatsThis和setTabData()进行更改。可以使用setTabEnabled()单独启用或禁用每个选项卡。

每个选项卡可以以不同的颜色显示文本。可以使用tabTextColor()函数找到选项卡的当前文本颜色。使用setTabTextColor()设置特定选项卡的文本颜色。

使用addTab()添加选项卡,或使用insertTab()在特定位置插入选项卡。选项卡的总数由count()给出。可以使用removeTab()从选项卡栏中删除选项卡。通过组合removeTab()和insertTab(),您可以将选项卡移动到不同的位置。

"形状"属性定义选项卡的外观。形状的选择是品味的问题,尽管标签对话框(用于偏好和类似)总是使用RoundedNorth。除对话框之外的windows中的选项卡控件几乎总是使用RoundedSouth或三角形南。许多电子表格和其他选项卡控件(其中所有页面基本上都是相似的)都使用三角形南,而RoundedSouth主要在页面不同时使用(例如多页工具调色板)。QTabBar中的默认值为RoundedNorth。

QTabBar API最重要的部分是currentchange()信号。每当当前选项卡更改时(即使在启动时,当当前选项卡从"无"更改时),也会发出此消息。还有一个插槽setCurrentIndex(),可用于以编程方式选择选项卡。函数currentIndex()返回当前选项卡的索引,count保存选项卡的数量。

QTabBar以qabstract按钮的方式创建自动助记键; 例如,如果选项卡的标签为"& Graphics",则Alt G将成为切换到该选项卡的快捷键。

可能需要重新实现以下虚拟功能,以调整外观和感觉或在每个选项卡中存储额外数据:

  • tabSizeHint()计算选项卡的大小。
  • tabInserted()通知已添加新选项卡。
  • tabRemoved()通知标签已被移除。
  • tabLayoutChange()通知标签已重新布置。
  • paintEvent()绘制所有标签。

对于子类,您可能还需要tabRect()函数,该函数返回单个选项卡的视觉几何图形。

fusion-tabbar1融合小部件样式中显示的选项卡栏。

fusion-tabbar-truncated2融合小部件样式中显示的截断选项卡栏。

切换卡标签栏QTabBar属性
属性描述
autoHide如果为true,当标签栏包含少于2个标签时,标签栏将自动隐藏
changeCurrentOnDrag如果为true,则当拖动到选项卡上时,当前选项卡将自动更改
count标签栏中的标签数
currentIndex标签栏的可见标签的索引
documentMode标签栏是否以适合主窗口的模式呈现
drawBase定义标签栏是否应该绘制它的基
elideMode如何在标签栏中省略文本
expanding当展开为true时,QTabBar将展开选项卡以使用空白空间
iconSize标签栏中图标的大小
movable此属性保存用户是否可以在选项卡区域内移动选项卡
selectionBehaviorOnRemove当removeTab被调用时,如果被移除的选项卡也是当前的选项卡,应该设置什么选项卡为当前的
shape选项卡栏中选项卡的形状
tabsClosable标签栏是否应该在每个标签上设置关闭按钮
usesScrollButtons当标签栏有很多标签时,是否应该使用按钮来滚动标签
切换卡标签栏QTabBar的方法
  • QTabBar使用起来很简单;它使用一个预定义的选项卡绘制选项卡,并在选项卡被选中时发出信号。它可以被子类化以定制外观和感觉。Qt还提供了一个现成的QTabWidget .shapes

  • 每个选项卡都有一个tabText(),一个可选的tabIcon(),一个可选的tabToolTip(),一个可选的tabWhatsThis()和一个可选的tabData()。选项卡的属性可以通过setTabText(),setTabIcon(),setTabToolTip(),setTabWhatsThis和setTabData()来改变。每个选项卡都可以使用setTabEnabled()单独启用或禁用。

  • 每个选项卡都可以以不同的颜色显示文本。标签的当前文本颜色可以通过tabTextColor()函数找到。使用setTabTextColor()设置特定选项卡的文本颜色。

  • 使用addTab()添加选项卡,或使用insertTab()插入特定位置。制表符的总数由count()给出。可以使用removeTab()从选项卡栏中删除选项卡。结合removeTab()和insertTab()可以将制表符移动到不同的位置。

  • shape属性定义了选项卡的外观。形状的选择取决于个人喜好,尽管总是使用标签对话框(用于首选项和类似选项)。除了对话框之外,窗口中的选项卡控件几乎总是使用非此即彼。许多电子表格和其他选项卡控件,其中所有的页面基本上都是相似的使用,而大多数情况下使用的页面是不同的(例如,多页工具面板)。QTabBar默认的是:

    • roundednorth
    • roundedsouth
    • triangularsouth
    • triangularsouth
    • roundedsouth
    • throundednorth
  • QTabBar API中最重要的部分是currentChanged()信号。当当前选项卡发生变化时(甚至在启动时,当当前选项卡从’none’改变时)都会触发。还有一个插槽setCurrentIndex(),可用于以编程方式选择一个选项卡。函数currentIndex()返回当前选项卡的索引,count保存选项卡的数量。

  • QTabBar以QAbstractButton的方式创建自动助记键;例如,如果一个选项卡的标签是"&Graphics",Alt+G成为切换到该选项卡的快捷键。

  • 以下虚函数可能需要重新实现,以定制外观或为每个选项卡存储额外的数据:

    • tabSizeHint()计算制表符的大小。
    • tabInserted()通知添加了一个新选项卡。
    • tabRemoved()通知一个选项卡已被删除。
    • tabLayoutChange()通知选项卡已重新布局。
    • paintEvent()绘制所有标签。
  • 对于子类,您可能还需要tabRect()函数,该函数返回单个选项卡的可视几何图形。

    属性描述/获取及设置方法
    autoHide: bool如果为真,当标签栏包含少于2个标签时,标签栏将自动隐藏。 默认情况下,此属性为false。 autoHide()setAutoHide(hide)
    changeCurrentOnDrag: bool如果为真,当拖动到标签栏时,当前标签会自动改变。默认情况下,此属性为false。 changeCurrentOnDrag()setChangeCurrentOnDrag(change)
    count: int此属性保存选项卡栏中的选项卡数量。 count()
    currentIndex: int此属性保存选项卡栏的可见选项卡的索引。 如果没有当前选项卡,则当前索引为-1。 currentIndex()setCurrentIndex(index)Signal currentChanged(index)
    documentMode: bool这个属性保留了标签栏是否以适合主窗口的模式呈现。 此属性用于提示样式,以不同的方式绘制选项卡,然后在选项卡小部件中显示它们。在macOS上,这看起来类似于Safari或Sierra的Terminal.app中的选项卡。 documentMode()setDocumentMode(set)
    drawBase: bool这个属性定义了标签栏是否应该绘制它的基。 如果为真,那么QTabBar绘制一个与样式重叠相关的基底。否则只绘制制表符。 drawBase()setDrawBase(drawTheBase)
    elideMode: TextElideMode此属性用于保存如何省略标签栏中的文本。 此属性控制在没有足够的空间显示给定标签栏大小的项时如何省略项。 默认情况下,该值依赖于样式。 elideMode()setElideMode(mode)
    expanding: bool当expand为true时,QTabBar将展开制表符以使用空白空间。缺省值为true。 expanding()setExpanding(enabled)
    iconSize: PySide6.QtCore.QSize此属性保存标签栏中图标的大小。 默认值是样式相关的。是最大尺寸;较小的图标不会按比例放大。iconsize iconSize()setIconSize(size)
    movable: bool这个属性保存用户是否可以在标签栏区域内移动标签。 默认情况下,此属性为false; isMovable()setMovable(movable)
    selectionBehaviorOnRemove: SelectionBehavior当removeTab被调用时,如果被移除的选项卡也是当前的选项卡,那么应该将哪个选项卡设置为当前的。默认值是.SelectRightTab selectionBehaviorOnRemove()setSelectionBehaviorOnRemove(behavior)
    shape: Shape此属性保存选项卡栏中选项卡的形状。 此属性的可能值由Shape enum描述。 shape()setShape(shape)
    tabsClosable: bool此属性用于确定一个选项卡栏是否应该在每个选项卡上放置关闭按钮。 当tabsClosable被设置为true时,关闭按钮将出现在选项卡的左边或右边,这取决于样式。当按钮被单击时,信号tabcloserequests将被触发。 缺省值为false。 tabsClosable()setTabsClosable(closable)
    usesScrollButtons: bool当标签栏有很多标签时,是否应该使用按钮来滚动标签。 当一个选项卡栏中有太多的选项卡时,选项卡栏可以选择扩大它的大小,或者添加按钮,让您可以在选项卡之间滚动。 默认情况下,该值依赖于样式。 usesScrollButtons()setUsesScrollButtons(useButtons)
方法描述
[Slot]setCurrentIndex(index:int)获取当前可见选项卡索引
accessibleTabName(index: int)–>str返回制表符所在位置的accessibblename,如果不在range.indexindex范围内则返回空字符串
addTab(icon:PySide6.QtGui.QIcon,text:str)–>int这是一个重载函数。 添加带有图标和文本的新选项卡。返回新标签的index.icontext
addTab(text:str)–>int添加带有文本的新选项卡。返回新标签的index
indexOf(widget:PySide6.QtWidgets.QWidget)–>int返回小部件w所占用页面的索引位置,如果找不到小部件,则返回-1。
initStyleOption(option:PySide6.QtWidgets.QStyleOptionTabWidgetFrame)用这个QTabWidget中的值初始化选项。当子类需要QStyleOptionTabWidgetFrame,但不想自己填充所有信息时,此方法非常有用。
insertTab(index:int,widget:PySide6.QtWidgets.QWidget,icon:PySide6.QtGui.QIcon,label:str)–>int这是一个重载函数。 将具有给定标签、页面和图标的选项卡插入到指定索引的选项卡小部件中,并在选项卡栏中返回所插入选项卡的索引。页面的所有权被传递给QTabWidget。 这个函数与insertTab()相同,但是增加了一个图标。
insertTab(index:int,widget:PySide6.QtWidgets.QWidget,arg__3:str)–>int将具有给定标签和页面的选项卡插入到指定索引的选项卡小部件中,并在选项卡栏中返回所插入选项卡的索引。页面的所有权被传递给QTabWidget。 标签显示在选项卡中,根据选项卡小部件的配置,其外观可能有所不同。 如果标签包含&号,&号后面的字母将被用作标签的快捷键,例如,如果标签是"Bro&wse",那么Alt+W将成为将焦点移动到该标签的快捷键。 如果index超出范围,则简单地追加制表符。否则,它被插入到指定的位置。 如果在调用此函数之前QTabWidget为空,则新页面将成为当前页面。在小于或等于当前索引的索引处插入新选项卡将增加当前索引,但保持当前页。 如果在show()之后调用insertTab(),布局系统将尝试调整其小部件层次结构的变化,并可能导致闪烁。为了防止这种情况,你可以在更改之前将updatesEnabled属性设置为false;记住在完成更改时将该属性设置为true,使小部件再次接收绘制事件。
isTabEnabled(index:int)–>bool如果页面位置索引已启用,则返回true;否则返回false。
isTabVisible(index:int)–>bool如果位于索引位置的页面可见,则返回true;否则返回false。
minimumTabSizeHint(index:int)–>PySide6.QtCore.QSize返回位于位置索引的制表符的最小制表符大小提示。
moveTab(from:int,to:int)将位于索引位置from的项移动到索引位置to。
removeTab(index:int)从此小部件堆栈中删除位置索引处的选项卡。页面小部件本身不会被删除。
selectionBehaviorOnRemove()–>PySide6.QtWidgets.QTabBar.SelectionBehavior获取当一个选项卡被移除时QTabBar的后新的选项卡焦点。 SelectionBehavior枚举值见下
setAccessibleTabName(index:int,name:str)在位置索引处设置选项卡的accesessiblename为name。
setAutoHide(hide:bool)设置少于2个标签时,标签栏是否自动隐藏
setChangeCurrentOnDrag(change:bool)设置当拖动到标签栏时,当前标签会自动改变
setDocumentMode(set:bool)设置是否以适合文档页面的模式呈现
setDrawBase(drawTheBase:bool)设置是否绘制标签栏基底
setElideMode(mode:PySide6.QtCore.Qt.TextElideMode)设置当显示不合适的文本时,省略号应该出现在哪里.TextElideMode枚举值见下
setExpanding(enabled:bool)设置是否展开制表符以使用空白空间
setIconSize(size:PySide6.QtCore.QSize)设置图标尺寸
setMovable(movable:bool)设置是否可以在标签栏区域内移动标签
setSelectionBehaviorOnRemove(behavior:PySide6.QtWidgets.QTabBar.SelectionBehavior)设置当一个选项卡被移除时QTabBar焦点切换策略,SelectionBehavior枚举值见下
setShape(shape:PySide6.QtWidgets.QTabBar.Shape)设置标签栏形状,Shape见下
setTabButton(index:int,position:PySide6.QtWidgets.QTabBar.ButtonPosition,widget:PySide6.QtWidgets.QWidget)在选项卡索引上设置小部件。小部件被放置在左边或右边,取决于位置。 任何先前在位置上设置的小部件都被隐藏。将小部件设置为None将隐藏当前小部件所在位置。 标签栏将拥有小部件的所有权,因此在这里设置的所有小部件在被销毁时将被标签栏删除,除非您在设置其他小部件(或None)后单独重新呈现小部件。 ButtonPosition枚举值见下
setTabData(index:int,data:object)将选项卡在位置索引处的数据设置为data。
setTabEnabled(index:int,enabled:bool)如果enabled为true,则位置索引处的制表符启用;否则,位置索引处的项将被禁用。
setTabIcon(index:int,icon:PySide6.QtGui.QIcon)将选项卡在位置index处的图标设置为icon。
setTabText(index:int,text:str)将制表符在位置index处的文本设置为text。
setTabTextColor(index:int,color:PySide6.QtGui.QColor)将具有给定索引的选项卡中文本的颜色设置为指定的颜色。 如果指定的颜色无效,则选项卡将使用QTabBar前景角色。
setTabToolTip(index:int,tip:str)在位置索引处设置选项卡的工具尖端为尖端。
setTabVisible(index:int,visible:bool)如果visible为true,则使位置索引处的制表符可见,否则将其隐藏。
setTabWhatsThis(index,text)将标签页位置索引处的What’s This帮助文本设置为文本。
setTabsClosable(closable:bool)设置索引处标签是否具有关闭按钮
setUsesScrollButtons(useButtons:bool)设置是否可滚动标签
tabAt(pos:PySide6.QtCore.QPoint)–>int返回包含位置的制表符的索引,如果没有制表符则返回-1;
tabButton(index,position:PySide6.QtWidgets.QTabBar.ButtonPosition)–>PySide6.QtWidgets.QWidget返回小部件集一个制表符索引和位置,如果没有设置则返回None。
tabInserted(index)在位置索引处添加或插入新选项卡后调用此虚拟处理程序。
tabLayoutChange()每当选项卡布局改变时,就会调用这个虚拟处理程序。
tabRect(index:int)–>PySide6.QtCore.QRect返回制表符在位置索引处的可视矩形,如果索引隐藏或超出范围,则返回空矩形。
tabRemoved(index)从位置索引中删除制表符后调用此虚拟处理程序。
tabSizeHint(index)–>PySide6.QtCore.QSize返回制表符在位置索引处的大小提示。
tabText(index)返回制表符位于索引位置的文本,如果索引超出范围则返回空字符串。
tabTextColor(index)–>PySide6.QtGui.QColor返回具有给定索引的选项卡的文本颜色,如果索引超出范围则返回无效颜色。
tabToolTip(index)–>str在索引位置返回选项卡的工具提示,如果索引超出范围则返回空字符串。
tabWhatsThis(index)–>str返回标签在位置索引处的What’s This帮助文本,如果索引超出范围则返回空字符串。
枚举值
  • PySide6.QtCore.Qt.TextElideMode

    这个枚举指定了当显示不合适的文本时,省略号应该出现在哪里:

    ConstantDescription
    Qt.ElideLeft省略号应出现在正文的开头。
    Qt.ElideRight省略号应出现在正文的末尾。
    Qt.ElideMiddle省略号应出现在正文中间。
    Qt.ElideNone省略不应该出现在文本中。
  • PySide6.QtCore.Qt.Corner

    这个枚举类型指定矩形中的一个角:

    ConstantDescription
    Qt.TopLeftCorner矩形的左上角。
    Qt.TopRightCorner矩形的右上角。
    Qt.BottomLeftCorner矩形的左下角。
    Qt.BottomRightCorner矩形的右下角。
  • PySide6.QtWidgets.QTabBar.Shape

    此枚举类型列出QTabBar支持的内置形状。将这些作为提示,因为有些样式可能不会渲染某些形状。然而,地位应该受到尊重。

    ConstantDescription
    QTabBar.RoundedNorth页面上方正常的圆形外观
    QTabBar.RoundedSouth页面下方正常的圆形外观
    QTabBar.RoundedWest页面左侧正常的圆形外观
    QTabBar.RoundedEast页面右侧正常的圆形外观
    QTabBar.TriangularNorth页面上方的三角形标签。
    QTabBar.TriangularSouth例如,三角形标签类似于Excel电子表格中使用的标签
    QTabBar.TriangularWest页面左侧的三角形标签。
    QTabBar.TriangularEast页面右侧的三角形标签。
  • PySide6.QtWidgets.QTabBar.ButtonPosition

    此枚举类型列出小部件在选项卡上的位置。

    ConstantDescription
    QTabBar.LeftSide标签的左侧。
    QTabBar.RightSide标签的右边。
  • PySide6.QtWidgets.QTabBar.SelectionBehavior

    该enum类型列出了当一个选项卡被移除时QTabBar的行为,并且被移除的选项卡也是当前的选项卡。

    ConstantDescription
    QTabBar.SelectLeftTab选择要删除的选项卡左边的选项卡。
    QTabBar.SelectRightTab选择要删除的选项卡右侧的选项卡。
    QTabBar.SelectPreviousTab选择前面选择的选项卡。
切换卡标签栏QTabBar的信号
信号描述
currentChanged(index: int)当选项卡栏的当前选项卡更改时,将发出此信号。新的当前值为给定值,如果没有新值,则为-1(例如,如果QTabBarindex中没有制表符)
属性currentIndex的通知信号。
tabBarClicked(index:int)当用户单击.index标签时发出此信号
Index为所单击选项卡的索引,如果光标下没有选项卡,则为-1。
tabBarDoubleClicked(index: int)当用户双击.index标签时发出此信号
Index指所单击的选项卡,如果光标下没有选项卡,则为-1。
tabCloseRequested(index:int)这个信号是在单击选项卡上的关闭按钮时发出的。是应该被删除的索引
tabMoved(from:int,to:int)当制表符将制表符从from索引位置移动到 to索引位置时,发出此信号
注意:当这个信号从它的标签栏发出时,QTabWidget将自动移动页面。

实例

import sys
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
import os

os.chdir(os.path.dirname(__file__))


class TabDemo(QWidget):
    def __init__(self,parent=None):
        super(TabDemo,self).__init__(parent)
        self.tabWidget = QTabWidget(self)
        self.tab1 = QWidget()
        self.tab2 = QWidget()
        self.tab3 = QWidget()
        self.tabWidget.addTab(self.tab1,"Page 0")
        self.tabWidget.insertTab(1,self.tab2,"Page 1")
        self.tabWidget.addTab(self.tab3,"Page 2")
        self.tab1Init()
        self.tab2Init()
        self.tab3Init()

        # 修改选项卡默认信息
        self.tabWidget.setTabShape(self.tabWidget.TabShape.Triangular)
        self.tabWidget.setTabPosition(self.tabWidget.TabPosition.South)

        pageComboBox = QComboBox()
        pageComboBox.addItem("Goto Page 0")
        pageComboBox.addItem("Goto Page 1")
        pageComboBox.addItem("Goto Page 2")
        # 导航与页面链接
        pageComboBox.activated.connect(self.tabWidget.setCurrentIndex)

        vlayout = QVBoxLayout(self)
        self.label = QLabel('用来显示信息')
        vlayout.addWidget(pageComboBox)
        vlayout.addWidget(self.label)
        vlayout.addWidget(self.tabWidget)
        self.setLayout(vlayout)

        self.setWindowTitle("QTabWidget 例子")
        self.resize(400,200)

        self.tabWidget.currentChanged.connect(self.tabChanged)

    def tab1Init(self):
        layout = QFormLayout()
        line1 = QLineEdit()
        line2 = QLineEdit()
        layout.addRow("姓名",line1)
        layout.addRow("电话",line2)
        self.tab1.setLayout(layout)
        self.tabWidget.setTabText(0,"联系方式")
        line1.editingFinished.connect(lambda: self.label.setText(f'page0,更新了姓名:{line1.text()}'))
        line2.editingFinished.connect(lambda: self.label.setText(f'page0,更新了电话:{line2.text()}'))

    def tab2Init(self):
        layout = QFormLayout()
        sex = QHBoxLayout()
        radio1 = QRadioButton("男")
        radio2 = QRadioButton("女")
        sex.addWidget(radio1)
        sex.addWidget(radio2)
        layout.addRow(QLabel("性别"),sex)
        line = QLineEdit()
        layout.addRow("教育程度",line)
        self.tab2.setLayout(layout)
        self.tabWidget.setTabText(1,"个人信息")
        self.tabWidget.setTabToolTip(1,'更新:个人信息')
        self.tabWidget.setTabIcon(1,QIcon(r'images/cartoon1.ico'))
        self.tabWidget.tabBar().setTabTextColor(1,QColor(40,120,120))

        radio1.clicked.connect(lambda: self.label.setText('page 1 更新了性别:男'))
        radio2.clicked.connect(lambda: self.label.setText('page 1 更新了性别:女'))
        line.editingFinished.connect(lambda: self.label.setText(f'page1,更新了教育程度:{line.text()}'))

    def tab3Init(self):
        layout = QHBoxLayout()
        check1 = QCheckBox('一等奖')
        check2 = QCheckBox('二等奖')
        check3 = QCheckBox('三等奖')
        layout.addWidget(check1)
        layout.addWidget(check2)
        layout.addWidget(check3)
        self.tab3.setLayout(layout)
        self.tabWidget.setTabText(2,"获奖情况")
        self.tabWidget.setTabToolTip(2,'更新:获奖情况')
        self.tabWidget.setTabIcon(2,QIcon(r'images/bao13.png'))
        self.tabWidget.tabBar().setTabTextColor(2,'red')

        _dict = {0: False,2: True,1: True}
        check1.stateChanged.connect(lambda x: self.label.setText(f'page2,更新了"1等奖"获取情况:{_dict[x]}'))
        check2.stateChanged.connect(lambda x: self.label.setText(f'page2,更新了"2等奖"获取情况:{_dict[x]}'))
        check3.stateChanged.connect(lambda x: self.label.setText(f'page2,更新了"3等奖"获取情况:{_dict[x]}'))

    def tabChanged(self,index: int):
        a = self.tabWidget.currentWidget()
        text = self.tabWidget.tabBar().tabText(index)
        self.label.setText(f'切换到页面{index},{text}')


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

;