【转】PyQt4 精彩实例分析 实例 6 实现 QQ 抽屉效果

抽屉效果是软件界面设计中的一种常用形式,目前很多流行软件都采用了抽屉效果,如腾讯公司的 QQ 软件,
抽屉效果可以以一种动态直观的方式在有限大小的界面上扩展出更多的功能。本实例在 Qt 下实现抽屉效果,
如下图所示。

具体实现代码如下:

 1 #!/usr/bin/python
 2 # -*- coding: utf-8 -*-
 3 
 4 from PyQt4.QtGui import *
 5 from PyQt4.QtCore import *
 6 import sys
 7 
 8 
 9 QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
10 
11 class ToolBoxDialog(QToolBox):
12 
13     def __init__(self, parent=None):
14         super(ToolBoxDialog, self).__init__(parent)
15 
16         self.setWindowTitle("My QQ")
17 
18         self.create_group_items()
19         self.create_toolBox()
20 
21     def create_group_items(self):
22         self.group_list = []
23         group_item_list_0 = [["jakey0", "image/2048.ico"],
24                              ["jakey1", "image/2048.ico"],
25                              ["jakey2", "image/2048.ico"],
26                              ["jakey3", "image/2048.ico"]]
27         group_item_list_1 = [["jakey4", "image/2048.ico"],
28                              ["jakey5", "image/2048.ico"],
29                              ["jakey6", "image/2048.ico"]]  
30         group_item_list_2 = [["jakey7", "image/2048.ico"],
31                              ["jakey8", "image/2048.ico"]]
32         self.group_list.append(group_item_list_0)
33         self.group_list.append(group_item_list_1)
34         self.group_list.append(group_item_list_2)
35 
36     def create_toolBox(self):
37         self.toolbox_list = []
38         for group in self.group_list:
39             temp_list = []
40             for item in group:
41                 toolButton = QToolButton()
42                 toolButton.setText(self.tr(item[0]))
43                 toolButton.setIcon(QIcon(item[1]))
44                 toolButton.setIconSize(QSize(80, 80))
45                 toolButton.setAutoRaise(True)
46                 toolButton.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
47                 temp_list.append(toolButton)
48             self.toolbox_list.append(temp_list)
49 
50         group_name_list = ["group_0", "group_1", "group_2"]
51         self.groupbox_list = []
52         for index,group_toolbox in enumerate(self.toolbox_list): 
53             groupbox = QGroupBox()
54             vlayout = QVBoxLayout(groupbox)
55             vlayout.setMargin(10)
56             vlayout.setAlignment(Qt.AlignCenter)
57             for toolButton in group_toolbox:
58                 vlayout.addWidget(toolButton)
59             vlayout.addStretch()
60             self.addItem(groupbox, self.tr(group_name_list[index]))
61 
62 
63 def main():
64     app = QApplication(sys.argv)
65     form = ToolBoxDialog()
66     form.show()
67     app.exec_()
68 
69 if __name__ == '__main__':
70     main()

PS: ico自己随意找个,在当前文件夹下新建一个image的文件夹,并将ico 放入其中

ToolBoxDialog类继承自 QToolBox,QToolBox 提供了一种列状的层叠窗体,本实例通过 QToolBox 来实现一种抽屉

效果,QToolButton 提供了一种快速访问命令或选择项的按钮,通常在工具条中使用。

每一个QGroupBox 类实例对应一个抽屉

设置按钮的 ToolButtonStyle 属性,ToolButtonStyle 属性主要用来描述按钮的文字和图标的
显示方式。Qt 定义了 4 种 QToolButtonStyle 类型,分别介绍如下。

Qt.ToolButtonIconOnly:只显示图标。

Qt.ToolButtonTextOnly:只显示文字。

Qt.ToolButtonTextBesideIcon:文字显示在图标旁边。

Qt.ToolButtonTextUnderIcon:文字显示在图标下面。

调用 addStretch()方法在按钮之后插入一个占位符,使得所有按钮能靠上对齐。并且在整个抽屉大
小发生改变时,保证按钮的大小不发生变化。

posted @ 2014-11-14 16:53  jakey.chen  阅读(1101)  评论(0)    收藏  举报