zoukankan      html  css  js  c++  java
  • 【PyQt5-Qt Designer】工具箱(QToolBox)用法讲解

    QToolBox() 实现抽屉效果

    总体介绍:

    QToolBox类提供了一列选项卡的小部件(选项卡内含项目)。

    工具箱是一个小部件,它将选项卡一个一个的显示,当前项目显示在当前选项卡下方。每个选项卡在选项卡列中都有一个索引位置。一个选项卡的项目是一个QWidget。

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

    项目使用addItem()添加,或使用insertItem()插入特定位置。项目总数由count()给出。可以删除项目,或使用removeItem()从工具箱中删除项目。通过组合removeItem()和insertItem(),您可以将项目移动到不同的位置。

    当前项目小部件的索引由currentIndex()返回,并用setCurrentIndex()设置。可以使用indexOf()来找到特定项目的索引,并且item()返回给定索引处的项目。

    currentChanged()信号在当前项目改变时发出。

    更多详细的介绍,请见官网:QToolBox Class | Qt Widgets 5.10

    类的归属:

    PyQt5->QtWidgets->QToolBox

    继承:QFrame

     抽屉窗口:

    效果如下:

    参考:
    https://zhuanlan.zhihu.com/p/33498667

    https://blog.csdn.net/la_vie_est_belle/article/details/82695938

    完整代码:

     1 import sys,webbrowser
     2 from PyQt5.QtGui import QIcon,QFont,QDesktopServices
     3 from PyQt5.QtCore import Qt,QSize,QUrl
     4 from PyQt5.QtWidgets import QApplication, QToolBox, QGroupBox, QToolButton, QVBoxLayout
     5 
     6 
     7 class Demo(QToolBox):  # 1
     8     def __init__(self):
     9         super(Demo, self).__init__()
    10         self.initUI()
    11 
    12     def initUI(self):
    13         self.setGeometry(300,300,400,320)
    14         self.setWindowTitle("QToolBox抽屉窗口")
    15         self.layout_init()
    16 
    17     def layout_init(self):
    18         self.groupBox1 = QGroupBox("搜索", self)
    19         self.groupBox2 = QGroupBox("视频", self)
    20         self.groupBox3 = QGroupBox("购物", self)
    21 
    22         self.vboxLayout1 = QVBoxLayout()
    23         self.vboxLayout2 = QVBoxLayout()
    24         self.vboxLayout3 = QVBoxLayout()
    25         self.toolButton_Icons = ["百度.png","谷歌.png","搜狐.png", "土豆.png","优酷.png","bilibili.png","淘宝.png","京东.png","亚马逊.png","唯品会.png","返利.png"]
    26         self.toolButton_Names = ["百度搜索","谷歌搜索","搜狐视频","土豆视频","优酷视频","bilibili番剧","淘宝","京东","亚马逊","唯品会","返利"]
    27         self.toolButtons = []
    28         for i in range(len(self.toolButton_Icons)):
    29             toolButton = QToolButton(self)
    30             toolButton.setIcon(QIcon(self.toolButton_Icons[i]))
    31             toolButton.setIconSize(QSize(80,80))
    32             toolButton.setText(self.toolButton_Names[i])
    33             toolButton.setFont(QFont("微软雅黑",16,QFont.Bold))
    34             toolButton.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)
    35             toolButton.setAutoRaise(True)
    36             toolButton.clicked.connect(self.btnClicked)
    37             self.toolButtons.append(toolButton)
    38             if i<2:
    39                 self.vboxLayout1.addWidget(toolButton)
    40                 self.vboxLayout1.setAlignment(Qt.AlignCenter)
    41             elif i<6:
    42                 self.vboxLayout2.addWidget(toolButton)
    43                 self.vboxLayout2.setAlignment(Qt.AlignCenter)
    44             else:
    45                 self.vboxLayout3.addWidget(toolButton)
    46                 self.vboxLayout3.setAlignment(Qt.AlignCenter)
    47 
    48         # self.groupBox1.setFlat(True)  #将groupBox 设置为flat
    49         # self.groupBox2.setFlat(True)
    50         # self.groupBox3.setFlat(True)
    51         self.groupBox1.setLayout(self.vboxLayout1)
    52         self.groupBox2.setLayout(self.vboxLayout2)
    53         self.groupBox3.setLayout(self.vboxLayout3)
    54 
    55         self.addItem(self.groupBox1,"搜索引擎!")
    56         self.addItem(self.groupBox2,"视频网站!")
    57         self.addItem(self.groupBox3,"购物网站!")
    58 
    59         self.currentChanged.connect(self.print_index_func)
    60 
    61 
    62     def print_index_func(self):
    63         toolboxs = {
    64             0:"搜索引擎!",
    65             1:"视频网站!",
    66             2:"购物网站!"
    67         }
    68         sentence = "你选择的栏目是:{}".format(toolboxs.get(self.currentIndex()))
    69         print(sentence)
    70 
    71     def btnClicked(self):
    72         urls_info = {"百度搜索": "https://www.baidu.com/", "谷歌搜索":"https://www.google.com.hk/",
    73                     "搜狐视频":"https://tv.sohu.com/", "土豆视频":"http://www.tudou.com/", "优酷视频":"http://www.youku.com/", "bilibili番剧":"https://www.bilibili.com/",
    74                     "淘宝":"https://www.taobao.com/", "京东": "https://www.jd.com/", "亚马逊":"https://www.amazon.cn/","唯品会":"https://www.vip.com/","返利":"https://www.fanli.com/"
    75         }
    76         items = [item for item in urls_info.items()]
    77         for i in range(len(items)):
    78             if self.sender().text() == items[i][0]:
    79                 QDesktopServices.openUrl(QUrl(items[i][1]))
    80                 # webbrowser.open(items[i][1]))     #导入webbrowser模块,与上述调用QDesktopServices,QUrl 效果一样打开网页
    81 
    82 
    83 if __name__ == '__main__':
    84     app = QApplication(sys.argv)
    85     demo = Demo()
    86     demo.show()
    87     sys.exit(app.exec_())
    QToolBox()+QToolButton()
  • 相关阅读:
    Java基础16(Java8的其它新特性)
    Java基础15(反射机制)
    Java基础14(网络编程)
    tensorflow.keras
    递归算法
    tensorfolw学习笔记——张量、微分、自定义训练、keras
    python可变长参数、key-only参数之收集和解包参数
    20200909- 集群迁移记录
    20200909--记一次发布流程
    20200909----开发沟通提效记录
  • 原文地址:https://www.cnblogs.com/XJT2018/p/10236093.html
Copyright © 2011-2022 走看看