【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()

 

posted @ 2019-01-08 15:27  XJT2019  阅读(7386)  评论(0编辑  收藏  举报