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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM