16. 容器类控件

发布时间 2023-12-26 17:15:01作者: 星光樱梦

一、容器控件

  容器控件可以将窗口中的控件进行分组处理,使窗口的分类更加清晰,常用的容器控件有 QGroupBox 分组框、QTabWidget 选项卡和 QToolBox 工具盒。

  我们可以在终端中使用 pip 安装 pyside 模块。

pip install pyside6

二、分组框控件

  QGroupBox 控件,又称为分组框控件,它主要为其它控件提供分组,并且按照控件的分组来细分窗口的功能。该类的常用方法如下:

方法 说明
setTitle(title) 设置分组标题
setAlignment(alignment) 设置对齐方式,参数如下:
- Qt.AlignmentFlag.AlignLeft:左对齐
- Qt.AlignmentFlag.AlignRight:右对齐
- Qt.AlignmentFlag.AlignTop:顶部对齐
- Qt.AlignmentFlag.AlignBottom:底部对齐
- Qt.AlignmentFlag.AlignJustify:两端对齐
- Qt.AlignmentFlag.AlignCenter:居中对齐
- Qt.AlignmentFlag.AlignHCenter:水平居中对齐
- Qt.AlignmentFlag.AlignVCenter:垂直居中对齐
setFlat(flat) 设置是否以扁平样式显示

  QGroupBox 控件常用信号及其说明如下:

clicked(checked=false)          # 被点击时发射信号
toggled(arg__1)                 # 切换时发射信号
import sys

from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtWidgets import QGroupBox
from PySide6.QtCore import Qt

if __name__ == "__main__":
    # 1.创建一个QApplication类的实例
    app = QApplication(sys.argv)

    # 2.创建一个窗口
    w = QMainWindow()

    # 3.设置窗口对象大小
    w.resize(700, 500)

    # 4.创建分组框控件对象,并指定父窗口
    groupBox = QGroupBox(w)

    # 5.设置分组框控件的尺寸
    groupBox.resize(300, 100)

    # 6.设置对齐方式
    groupBox.setAlignment(Qt.AlignmentFlag.AlignVCenter)

    # 7.设置分组标题
    groupBox.setTitle("分组标题")

    # 8.设置是否以扁平样式显示
    groupBox.setFlat(False)

    # 9.展示窗口
    w.show()

    # 10.进入程序的主循环并通过exit()函数确保主循环安全结束
    sys.exit(app.exec())

三、选项卡控件

  QTabWidget 控件,又称为选项卡控件,它可以将窗口设置为多页,以便使窗口的功能划分为多个部分,而每个部分都可以包含多个子控件。该类的常用方法如下:

方法 说明
addTab(widget, icon, label) 添加选项卡
insertTab(index, widget, icon, label) 向指定索引插入选项卡
removeTab(index) 删除指定索引的选项卡
tabText(index) 获取指定索引的选项卡文本
setTabText(index, text) 设置指定选项卡标题文本
tabIcon(index) 获取指定索引的选项卡图标
setTabIcon(index, icon) 设置指定索引选项卡图标
currentWidget() 获取当前选中的选项卡
setCurrentWidget(widget) 设置默认选中的选项卡
currentIndex() 获取当前选项卡的索引
setCurrentIndex(index) 设置默认选中的选项卡
setTabsClosable(closeable) 设置是否可以独立关闭选项卡
- True 表示可以关闭,在每个选项卡旁边有一个关闭按钮
- False 表示不可关闭
setTabPosition(position) 设置选项卡的标题位置,支持以下 4 种位置:
- QTabWidget.TabPosition.North:标题在北方,即上边,这是默认值
- QTabWidget.TabPosition.South:标题在南方,即下边
- QTabWidget.TabPosition.West:标题在西方,即左边
- QTabWidget.TabPosition.East:标题在东方,即右边

  QTabWidge 控件最常用的信号及其说明如下:

currentChanged(index)           # 标签栏上的选项卡改变时发射信号
tabBarClicked(index)            # 标签栏被点击时发射信号
tabBarDoubleClicked(index)      # 标签栏被双击时发射信号
tabCloseRequested(index)        # 标签栏被关闭时发射信号
import sys

from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtWidgets import QTabWidget, QWidget
from PySide6.QtGui import QIcon

if __name__ == "__main__":
    # 1.创建一个QApplication类的实例
    app = QApplication(sys.argv)

    # 2.创建一个窗口
    w = QMainWindow()

    # 3.设置窗口对象大小
    w.resize(700, 500)

    # 4.创建选项卡控件对象,并指定父窗口
    tabWidget = QTabWidget(w)

    # 5.设置选项卡框控件的位置和尺寸
    tabWidget.setGeometry(100, 100, 500, 300)

    # 6.添加选项卡
    tab1 = QWidget()
    tabWidget.addTab(tab1, QIcon("1.ico"), "选项卡1")

    # 7.插入选项卡
    tab2 = QWidget()
    tabWidget.insertTab(1, tab2, QIcon("1.ico"), "选项卡2")

    tab3 = QWidget()
    tabWidget.addTab(tab3, "选项卡-3")

    # 8.设置指定选项卡标题文本
    tabWidget.setTabText(2, "选项卡3")

    # 9.获取指定索引的选项卡文本
    print(tabWidget.tabText(2))

    # 10.设置指定索引选项卡图标
    tabWidget.setTabIcon(2, QIcon("1.ico"))

    # 11.设置是否可以独立关闭选项卡
    tabWidget.setTabsClosable(True)

    # 12.设置选项卡的标题位置
    tabWidget.setTabPosition(QTabWidget.TabPosition.West)

    # 13.设置默认选中的选项卡
    # tabWidget.setCurrentIndex(1)
    tabWidget.setCurrentWidget(tab3)

    # 14.获取当前选中选项卡索引
    print(tabWidget.currentIndex())

    # 15.获取当前选中的选项卡
    print(tabWidget.currentWidget())
  
    # 16.删除指定索引的选项卡
    tabWidget.removeTab(1)

    # 17.展示窗口
    w.show()

    # 18.进入程序的主循环并通过exit()函数确保主循环安全结束
    sys.exit(app.exec())

TabWidge 在显示选项卡时,如果默认大小显示不下,会自动生成先前和先后的箭头,用户可以通过单击箭头,查看未显示的选项卡;

当删除某个选项卡时,选项卡会自动切换到前一个,因此也会弹出相应的信息提示。

四、工具盒控件

  QToolBox 控件,又称为工具盒控件,它主要提供一种列状的层叠选项卡。该类的常用方法如下:

方法 说明
addItem(widget, icon, text) 添加选项卡
insertItem(index, widget, icon, text) 向指定索引插入选项卡
removeItem(index) 移除指定索引的选项卡
itemText(index) 获取指定索引的选项卡的文本
setItemText(index, text) 设置指定索引的文本
itemIcon(index) 获取指定指定索引的图标
setItemIcon(index, icon) 设置指定索引的图标
currentWidget() 获取当前选项卡
setCurrentWidget(widget) 设置默认选中的选项卡
currentIndex() 获取当前选项卡的索引
setCurrentIndex(index) 设置默认选中的选项卡

  QToolBox 控件常用信号及其说明如下:

currentChanged(index)       # 当前项改变时发射信号
import sys

from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtWidgets import QToolBox, QWidget
from PySide6.QtGui import QIcon

if __name__ == "__main__":
    # 1.创建一个QApplication类的实例
    app = QApplication(sys.argv)

    # 2.创建一个窗口
    w = QMainWindow()

    # 3.设置窗口对象大小
    w.resize(700, 500)

    # 4.创建工具盒控件对象,并指定父窗口
    toolBox = QToolBox(w)

    # 5.设置工具盒框控件的位置和尺寸
    toolBox.setGeometry(100, 100, 500, 300)

    # 6.添加选项卡
    toolBox.addItem(QWidget(), QIcon("1.ico"), "科技部")

    # 7.向指定索引插入选项卡
    page = QWidget()
    toolBox.insertItem(1, page, QIcon("1.ico"), "魔法部")

    toolBox.addItem(QWidget(), "奇异部")
    toolBox.addItem(QWidget(), QIcon("1.ico"), "侦探部")

    # 8.设置指定索引的文本
    toolBox.setItemText(2, "超能力部")

    # 9.获取指定索引的选项卡的文本
    print(toolBox.itemText(2))

    # 10.获取指定指定索引的图标
    icon = toolBox.itemIcon(0)

    # 11.设置指定索引的图标
    toolBox.setItemIcon(2, icon)

    # 12.设置默认选中的选项卡
    # toolBox.setCurrentWidget(page)
    toolBox.setCurrentIndex(1)

    # 13.获取当前选项卡的索引
    print(toolBox.currentIndex())

    # 14.获取当前选项卡
    print(toolBox.currentWidget())

    # 15.移除指定索引的选项卡
    toolBox.removeItem(3)

    # 16.设置工具盒是否可用
    toolBox.setEnabled(False)

    # 17.展示窗口
    w.show()

    # 18.进入程序的主循环并通过exit()函数确保主循环安全结束
    sys.exit(app.exec())