工具栏容器QToolBox
QToolBox类提供了一列选项卡式小部件项。
工具箱控件QToolBox与切换卡控件QTabWidget 有些类似,也是由多页构成每页有标题名称。
与切换卡不同的是,工具箱的标题是从上到下依次排列,每页的标题呈按钮状态,单击每页的标题,每页的窗口会显示在标题按钮下面,而切换卡的标题是按顺序展开,切换卡的标题面积比卡片窗口的面积小。工具箱界面的外观由两个按钮构成。
QToolBox是从QFrame类继承而来的。用QTolBox类创建实例对象的方法如下所示,其中parent是窗口或者容器类控件,参数 QtWindowFlags 用于设置窗口类型其取值参考31节中的内容,默认值是Qt.Widget。
from PySide6.QtWidgets import QToolBox
QToolBox(parent: Union[PySide6.QtWidgets.QWidget,NoneType]=None,f: PySide6.QtCore.Qt.WindowType=Default(Qt.WindowFlags))-> None
工具箱是一个小部件,它在另一个上方显示一列选项卡,当前项目显示在当前选项卡下方。每个选项卡在选项卡列中都有一个索引位置。标签的项目是QWidget。
每个项目都有一个itemText() 、一个可选的itemIcon() 、一个可选的itemToolTip() 和一个小部件 ()。可以使用setItemText(),setItemIcon() 和setItemToolTip() 更改项目的属性。可以使用setItemEnabled() 单独启用或禁用每个项目。
使用addItem() 添加项目,或使用insertItem() 在特定位置插入项目。项目总数由count() 给出。可以使用delete删除项目,也可以使用removeItem() 从工具箱中删除项目。结合removeItem() 和insertItem() 可以将项目移动到不同的位置。
当前项目小部件的索引由currentIndex() 返回,并使用setCurrentIndex() 设置。可以使用indexOf() 找到特定项目的索引,并且给定索引处的项目由item() 返回。
当前项目更改时,会发出current更改 () 信号。
工具箱控件QToolBox的常用方法
工具箱控件QToolBox的常用方法如表所示。
工具箱中的每个窗口称为item(项或条目)。
- 用addItem(QWidget,text; str)或addItem(QWidget,QIcon,text;str)方法在末尾添加项
- QWidget 是对应的窗口或控件,
- text是项的标题名称,可以在文本中添加"&"和字母设置快捷键;
- 用insertItem(index:int,QWidget,text:str)或 insertItem(index:int,QWidget,QIcon,text;str)方法可以在指定位置插项;
- 用removeItem(index:int)方法可以删除指定的项;
- 用count()方法可以获取项的数量;
- 用setItemText(int;str)方法可以设置项的标题名称;
- 用setItemIcon(int,QIcon)方法可以指定项的图标
- 用currentWidget()方法可以获取当前项的窗口;
- 用widget(index:int)方法可以根据索引值获取项的窗口。
QToolBox的方法及参数类型 | 返回值的类型 | 说 明 |
---|---|---|
addItem(QWidget,text:str) | int | 在末尾添加项,text 是标题名称,QIcon 是图 标或QPixmap 图像 |
addItem(QWidget,QIcon,text;str) | int | 在末尾添加项,text 是标题名称,QIcon 是图 标或QPixmap 图像 |
insertltem(index: int,QWidget,text: str) | int | 根据索引插入项,新插入项的索引值是index |
insertltem(index:int.QWidget,QIcon,str) | int | 根据索引插入项,新插入项的索引值是index |
[slot]setCurrentIndex(index:int) | None | 将索引值是int的项设置成当前项 |
currentIndex() | int | 获取当前项的索引 |
[slot]setCurrentWidget(QWidget) | None | 将指定窗口设置成当前窗口 |
currentWidget() | QWidget | 获取当前项的窗口 |
widget(index:int) | int | 获取索引值是int的窗口 |
removeItem(index:int) | None | 移除索引值是 int的项 |
count() | int | 获取项的数量 |
indexOf(QWidget) | int | 获取指定窗口的索引值 |
setItenEnabled(index: int,bool) | None | 设置索引值是int的项是否激活 |
isltemEnabled(index:int) | bool | 获取索引值是int的项是否激活 |
setltemIcon(index: int,QIcon) | None | 设置项的图标 |
itemIcon(index:int) | QIcon | 获取项的图标 |
setItemText(index:int,str) | None | 设置项的标题名称 |
item Text(index:int) | str | 获取项的标题名称 |
setItemToolTip(index: int,str) | None | 设置项的提示信息 |
itemToolTip(index:int) | str | 获取项的提示信息 |
工具箱控件QToolBox的常用方法和信号
工具箱控件只有1个信号currentChanged(index:int)当前项发生变化时发送参数是当前项的索引。
工具箱控件QToolBox实例
# -*- coding: UTF-8 -*-
# File date: Hi_2023/2/28 22:59
# File_name: 01-ToolBox例子.py
import sys
from PySide6.QtCore import Qt.QSize
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import(QApplication,QWidget,QToolBox,QToolButton,QGroupBox,QVBoxLayout,QHBoxLayout)
class DemotoolBox(QWidget):
def __init__(self,parent=None):
super(DemotoolBox,self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('QToolBox Demo!')
# 设置窗口大小
self.resize(480,360)
self.initUi()
def initUi(self):
self.names =['长跑','斯诺克','棒球']
self.gamers =[
[
{'name':'赵一','pic':':../../../Resources/animal/m1.png'},
{'name':'钱二','pic':'../../../Resources/animal/m2.png'},
],
[
{'name':'张三','pic':'../../../Resources/animal/m3.png'},
{'name':'李四','pic':'../../../Resources/animal/m4.png'},
],
[
{'name':'王五','pic':'../../../Resources/animal/m5.png'},
{'name':'郑六','pic':'../../../Resources/animal/m6.png'},
]
]
vLayout = QVBoxLayout(self)
self.toolBox = QToolBox(self)
self.toolBox.currentChanged.connect(self.onToolBoxCurrentChanged)
for index in range(0,3):
self.toolBox.addItem(self.createGroup(index),self.names[index])
vLayout.addWidget(self.toolBox)
self.setLayout(vLayout)
def createGroup(self,index):
grpBox = QGroupBox(self)
layout = QHBoxLayout(self)
for category in self.gamers[index]:
gamer = QToolButton(self)
gamer.setText(category['name'])
gamer.setIcon(QIcon(category['pic']))
gamer.setIconSize(QSize(128,128))
gamer.setAutoRaise(True)
gamer.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
layout.addWidget(gamer)
grpBox.setLayout(layout)
return grpBox
def onToolBoxCurrentChanged(self):
info ='您正在查看{}项目.'.format(self.names[self.toolBox.currentIndex()])
print(info)
if __name__ =='__main__':
app = QApplication(sys.argv)
window = DemotoolBox()
window.show()
sys.exit(app.exec())