QToolBox() 實現抽屜效果
整體介紹:
QToolBox類提供了一列選項卡的小部件(選項卡內含項目)。html
工具箱是一個小部件,它將選項卡一個一個的顯示,當前項目顯示在當前選項卡下方。每一個選項卡在選項卡列中都有一個索引位置。一個選項卡的項目是一個QWidget。web
每一個項目都有一個itemText(),一個可選的itemIcon(),一個可選的itemToolTip()和一個widget()。項目的屬性能夠經過setItemText(),setItemIcon()和setItemToolTip()來改變。每一個項目均可以使用setItemEnabled()單獨啓用或禁用。app
項目使用addItem()添加,或使用insertItem()插入特定位置。項目總數由count()給出。能夠刪除項目,或使用removeItem()從工具箱中刪除項目。經過組合removeItem()和insertItem(),您能夠將項目移動到不一樣的位置。ide
當前項目小部件的索引由currentIndex()返回,並用setCurrentIndex()設置。能夠使用indexOf()來找到特定項目的索引,而且item()返回給定索引處的項目。工具
currentChanged()信號在當前項目改變時發出。網站
更多詳細的介紹,請見官網:QToolBox Class | Qt Widgets 5.10ui
類的歸屬:
PyQt5->QtWidgets->QToolBox搜索引擎
繼承:QFramegoogle
抽屜窗口:url
效果以下:
參考:
https://zhuanlan.zhihu.com/p/33498667
https://blog.csdn.net/la_vie_est_belle/article/details/82695938
完整代碼:
![](http://static.javashuo.com/static/loading.gif)
![](http://static.javashuo.com/static/loading.gif)
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_())