实战PyQt5: 048-工具箱控件QToolBox

QToolBox简介

QToolBox控件提供了一个可进行一列选项卡操作方式,在每个选项卡内可包含不同的控件布局。QToolBox将选项卡一个一个地显示,当前项目显示在当前选项卡下方。每个选项卡在选项卡列中都有一个索引位置。一个选项卡的项目是一个QWidget。

QToolBox的每个选项都有一个itemText(),一个可选的itemIcon(),一个可选的itemToolTip()和一个widget()。选项的属性可以通过setItemText(),setItemIcon()和setItemToolTip()来改变。每个项目都可以使用setItemEnabled()单独启用或禁用。

QToolBox常用方法有:

  • addItem(): 添加一个项目(Item);
  • insertItem(): 在指定位置插入一个项目;
  • removeItem(): 移除一个项目;
  • count(): 获得总共的项目数;
  • currentIndex(): 当前操作的项目;
  • setCurrentIndex(): 设置当前操作的项目;
  • setItemText(): 设置项目要显示的文本;
  • setItemIcon(): 设置项目图标;
  • setItemTooltip(): 设置项目提示信息;
  • setItemEnabled(): 启用或者禁用项目。

QToolBox常用信号:

  • currentChanged: 当前项目发生改变时发出该信号。

QToolBox类继承关系:

实战PyQt5: 048-工具箱控件QToolBox

 

测试QToolBox

建立文件qtoobox.py, 假设举行一个运动会,有一些项目,每个项目都有运动员参加,每点开一个项目,则显示项目下的运动员, 完整代码如下:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt, QSize
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import (QApplication, QWidget, QToolBox, QToolButton,
                             QGroupBox, QVBoxLayout, QHBoxLayout)
import resource_rc
 
class DemoToolBox(QWidget):
    def __init__(self, parent=None):
        super(DemoToolBox, self).__init__(parent)   
        
         # 设置窗口标题
        self.setWindowTitle('实战PyQt5: QToolBox Demo!')      
        # 设置窗口大小
        self.resize(480, 360)
      
        self.initUi()
        
    def initUi(self):
        
        self.names = ['长跑', '斯诺克', '棒球']
        
        self.gamers = [
            [
                {'name':'赵一', 'pic':':/img/f_runner.ico'},
                {'name':'钱二', 'pic':':/img/m_runner.ico'},
            ],
            [
                {'name':'张三', 'pic':':/img/f_snooker.ico'},
                {'name':'李四', 'pic':':/img/m_snooker.ico'},
            ],
            [
                {'name':'王五', 'pic':':/img/f_baseball_player.ico'},
                {'name':'郑六', 'pic':':/img/m_baseball_player.ico'},
            ]
        ]
        
        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())  

资源文件resource.qrc内容如下:

<RCC>
    <qresource prefix="/">
        <file>img/f_baseball_player.ico</file>
        <file>img/f_runner.ico</file>
        <file>img/f_snooker.ico</file>
        <file>img/m_baseball_player.ico</file>
        <file>img/m_runner.ico</file>
        <file>img/m_snooker.ico</file>
    </qresource>
</RCC>

运行结果如下图所示:

实战PyQt5: 048-工具箱控件QToolBox

测试QToolBox

本文知识点

  • QToolBox添加不同的项目;
  • QToolButton文字和按钮布局样式;
  • 使用资源文件加载图标。

前一篇:  实战PyQt5: 047-分组框控件QGroupBox

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值