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