返回顶部

PyQt5 控件学习(一个一个学习之QToolButton)

QToolButton 的继承图:

 

QToolButton 之描述:

一个主窗口,我们一般分为 从上到下,标题栏 ,菜单栏(文字) ,工具栏(一般都是图标,没文字),工作区,状态栏。

我们这里说的是工具栏

QToolButton 之继承:

它继承自QAbstractButton !

QToolButton 之功能作用:

 

 1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
 2 import sys
 3 #1,创建app
 4 app  = QApplication(sys.argv)
 5 
 6 
 7 #2,控件的操作:
 8 #创建控件
 9 window = QWidget()
10 
11 
12 #设置控件
13 window.setWindowTitle("QCommandLinkButton功能作用")
14 window.resize(500,500)
15 
16 bool_btn = QToolButton(window)
17 bool_btn.setText("工具按钮")
18 ############################当有图标显示时候,文本就不会显示了###############################
19 #它和QPushButton 的不同,就是在于它一般只显示图标,不显示文本,而
20 #QpushButton 既显示文本又显示图标。
21 
22 bool_btn.setIcon(QIcon("icon.ico"))
23 #注:图标大小也可修改!
24 ############################当有图标显示时候,文本就不会显示了###############################
25 
26 
27 #展示控件
28 window.show()
29 
30 #3,进入消息循环
31 sys.exit(app.exec_())
QToolButton 一般是只显示图标,不显示文本,这是它和QPushButton 的最大不同

 1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
 2 import sys
 3 #1,创建app
 4 app  = QApplication(sys.argv)
 5 
 6 
 7 #2,控件的操作:
 8 #创建控件
 9 window = QWidget()
10 
11 
12 #设置控件
13 window.setWindowTitle("QCommandLinkButton功能作用")
14 window.resize(500,500)
15 
16 bool_btn = QToolButton(window)
17 
18 bool_btn.setIcon(QIcon("icon.ico"))
19 ###########################################################
20 bool_btn.setToolTip("这是一个新建按钮")
21 ###########################################################
22 
23 
24 
25 #展示控件
26 window.show()
27 
28 #3,进入消息循环
29 sys.exit(app.exec_())
View Code

但是,如果我们实在是想在工具按钮上一起显示文字和图标

如下:

 1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
 2 import sys
 3 #1,创建app
 4 app  = QApplication(sys.argv)
 5 
 6 
 7 #2,控件的操作:
 8 #创建控件
 9 window = QWidget()
10 
11 
12 #设置控件
13 window.setWindowTitle("QCommandLinkButton功能作用")
14 window.resize(500,500)
15 
16 bool_btn = QToolButton(window)
17 
18 bool_btn.setIcon(QIcon("icon.ico"))
19 bool_btn.setText("工具按钮")
20 
21 bool_btn.setToolTip("这是一个新建按钮")
22 
23 bool_btn.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)
24 
25 
26 
27 
28 #展示控件
29 window.show()
30 
31 #3,进入消息循环
32 sys.exit(app.exec_())
View Code

 

 1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
 2 import sys
 3 #1,创建app
 4 app  = QApplication(sys.argv)
 5 
 6 
 7 #2,控件的操作:
 8 #创建控件
 9 window = QWidget()
10 
11 
12 #设置控件
13 window.setWindowTitle("QCommandLinkButton功能作用")
14 window.resize(500,500)
15 
16 bool_btn = QToolButton(window)
17 
18 bool_btn.setArrowType(Qt.UpArrow)
19 bool_btn.setArrowType(Qt.RightArrow) 
20     #注意,如果箭头和图标同时存在的话,箭头的优先级高
21 
22 
23 #展示控件
24 window.show()
25 
26 #3,进入消息循环
27 sys.exit(app.exec_())
View Code

 

 1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
 2 import sys
 3 #1,创建app
 4 app  = QApplication(sys.argv)
 5 
 6 
 7 #2,控件的操作:
 8 #创建控件
 9 window = QWidget()
10 
11 
12 #设置控件
13 window.setWindowTitle("QCommandLinkButton功能作用")
14 window.resize(500,500)
15 
16 bool_btn = QToolButton(window)
17 
18 bool_btn.setIcon(QIcon("icon.ico"))
19 bool_btn.setIconSize(QSize(50,50))
20 
21 ############################自动提升效果###############################
22 bool_btn.setAutoRaise(True)
23 #当鼠标放上去的时候,会有自动提升的效果
24 
25 ############################自动提升效果###############################
26 
27 ############################一般的扁平化效果###############################
28 
29 btn = QPushButton(window)
30 btn.setFlat(True)
31 btn.move(100,100)
32 btn.setIcon(QIcon("icon.ico"))
33 btn.setIconSize(QSize(50,50))  #当鼠标放上去的时候,也不会提升上来。
34 
35 ############################一般的扁平化效果###############################
36 
37 
38 
39 
40 #展示控件
41 window.show()
42 
43 #3,进入消息循环
44 sys.exit(app.exec_())
自动提升

 1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
 2 import sys
 3 #1,创建app
 4 app  = QApplication(sys.argv)
 5 
 6 
 7 #2,控件的操作:
 8 #创建控件
 9 window = QWidget()
10 
11 
12 #设置控件
13 window.setWindowTitle("QCommandLinkButton功能作用")
14 window.resize(500,500)
15 
16 bool_btn = QToolButton(window)
17 
18 bool_btn.setIcon(QIcon("icon.ico"))
19 bool_btn.setIconSize(QSize(50,50))
20 
21 bool_btn.setAutoRaise(True)
22 #当鼠标放上去的时候,会有自动提升的效果
23 
24 
25 ############################给QPushButton按钮设置菜单###############################
26 
27 btn = QPushButton(window)
28 btn.setFlat(True)
29 btn.move(100,100)
30 btn.setText("菜单")
31 
32 menu = QMenu(btn)
33 
34 sub_menu = QMenu(menu)
35 sub_menu.setTitle("子菜单")
36 relative_action  = QAction("最近打开")
37 sub_menu.addAction(relative_action)
38 
39 
40 new_action = QAction("新建")
41 menu.addAction(new_action)
42 
43 open_action = QAction("打开")
44 menu.addAction(open_action)
45 
46 menu.addSeparator()
47 menu.addMenu(sub_menu)
48 
49 
50 btn.setMenu(menu)
51 ############################给QPushButton按钮设置菜单###############################
52 
53 
54 
55 
56 #展示控件
57 window.show()
58 
59 #3,进入消息循环
60 sys.exit(app.exec_())
给Qpushbutton 按钮设置菜单复习

 

我们把上面的代码放到工具按钮上,

from PyQt5.Qt import * #刚开始学习可以这样一下导入
import sys
#1,创建app
app  = QApplication(sys.argv)


#2,控件的操作:
#创建控件
window = QWidget()


#设置控件
window.setWindowTitle("QCommandLinkButton功能作用")
window.resize(500,500)

tool_btn = QToolButton(window)

tool_btn.setIcon(QIcon("icon.ico"))
tool_btn.setIconSize(QSize(50,50))

tool_btn.setAutoRaise(True)
#当鼠标放上去的时候,会有自动提升的效果


############################给工具按钮设置菜单###############################

# btn = QPushButton(window)
# btn.setFlat(True)
# btn.move(100,100)
# btn.setText("菜单")

menu = QMenu(tool_btn)

sub_menu = QMenu(menu)
sub_menu.setTitle("子菜单")
relative_action  = QAction("最近打开")
sub_menu.addAction(relative_action)


new_action = QAction("新建")
menu.addAction(new_action)

open_action = QAction("打开")
menu.addAction(open_action)

menu.addSeparator()
menu.addMenu(sub_menu)


tool_btn.setMenu(menu)
############################给工具按钮设置菜单###############################



#展示控件
window.show()

#3,进入消息循环
sys.exit(app.exec_())
给工具按钮设置菜单

但是 ,却不能显示菜单效果,这时因为有个东西要设置的。

这里涉及到菜单的弹出模式:

它的默认弹出模式是,按住一会才会弹出菜单。

按住不松的应用场景:

按住不送的话,会展示历史记录! 这是它的应用场景。

可以通过setPopupMode来改变菜单弹出方式。

tool_btn.setPopupMode(QToolButton.MenuButtonPopup)效果如下: 

 1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
 2 import sys
 3 #1,创建app
 4 app  = QApplication(sys.argv)
 5 
 6 
 7 #2,控件的操作:
 8 #创建控件
 9 window = QWidget()
10 
11 
12 #设置控件
13 window.setWindowTitle("QCommandLinkButton功能作用")
14 window.resize(500,500)
15 
16 tool_btn = QToolButton(window)
17 
18 tool_btn.setIcon(QIcon("icon.ico"))
19 tool_btn.setIconSize(QSize(50,50))
20 
21 tool_btn.setAutoRaise(True)
22 #当鼠标放上去的时候,会有自动提升的效果
23 
24 
25 ############################给工具按钮设置菜单###############################
26 
27 # btn = QPushButton(window)
28 # btn.setFlat(True)
29 # btn.move(100,100)
30 # btn.setText("菜单")
31 
32 menu = QMenu(tool_btn)
33 
34 sub_menu = QMenu(menu)
35 sub_menu.setTitle("子菜单")
36 relative_action  = QAction("最近打开")
37 sub_menu.addAction(relative_action)
38 
39 
40 new_action = QAction("新建")
41 menu.addAction(new_action)
42 
43 open_action = QAction("打开")
44 menu.addAction(open_action)
45 
46 menu.addSeparator()
47 menu.addMenu(sub_menu)
48 
49 
50 tool_btn.setMenu(menu)
51 tool_btn.setPopupMode(QToolButton.MenuButtonPopup)
52 ############################给工具按钮设置菜单###############################
53 
54 
55 
56 #展示控件
57 window.show()
58 
59 #3,进入消息循环
60 sys.exit(app.exec_())
View Code

 

tool_btn.setPopupMode(QToolButton.InstantPopup)

from PyQt5.Qt import * #刚开始学习可以这样一下导入
import sys
#1,创建app
app  = QApplication(sys.argv)


#2,控件的操作:
#创建控件
window = QWidget()


#设置控件
window.setWindowTitle("QCommandLinkButton功能作用")
window.resize(500,500)

tool_btn = QToolButton(window)

tool_btn.setIcon(QIcon("icon.ico"))
tool_btn.setIconSize(QSize(50,50))

tool_btn.setAutoRaise(True)
#当鼠标放上去的时候,会有自动提升的效果


############################给工具按钮设置菜单###############################

# btn = QPushButton(window)
# btn.setFlat(True)
# btn.move(100,100)
# btn.setText("菜单")

menu = QMenu(tool_btn)

sub_menu = QMenu(menu)
sub_menu.setTitle("子菜单")
relative_action  = QAction("最近打开")
sub_menu.addAction(relative_action)


new_action = QAction("新建")
menu.addAction(new_action)

open_action = QAction("打开")
menu.addAction(open_action)

menu.addSeparator()
menu.addMenu(sub_menu)


tool_btn.setMenu(menu)
tool_btn.setPopupMode(QToolButton.InstantPopup)
############################给工具按钮设置菜单###############################



#展示控件
window.show()

#3,进入消息循环
sys.exit(app.exec_())
View Code

注意:不同的菜单弹出模式是对工具按钮的信号发射是有影响的!

用的时候自己试下就知道了。

QToolButton 之信号:

点击某个action时触发:

from PyQt5.Qt import * #刚开始学习可以这样一下导入
import sys
#1,创建app
app  = QApplication(sys.argv)


#2,控件的操作:
#创建控件
window = QWidget()


#设置控件
window.setWindowTitle("QCommandLinkButton功能作用")
window.resize(500,500)

tool_btn = QToolButton(window)

tool_btn.setIcon(QIcon("icon.ico"))
tool_btn.setIconSize(QSize(50,50))

tool_btn.setAutoRaise(True)
#当鼠标放上去的时候,会有自动提升的效果


############################给工具按钮设置菜单###############################

# btn = QPushButton(window)
# btn.setFlat(True)
# btn.move(100,100)
# btn.setText("菜单")

menu = QMenu(tool_btn)

sub_menu = QMenu(menu)
sub_menu.setTitle("子菜单")
relative_action  = QAction("最近打开")
sub_menu.addAction(relative_action)


new_action = QAction("新建")
menu.addAction(new_action)

open_action = QAction("打开")
menu.addAction(open_action)

menu.addSeparator()
menu.addMenu(sub_menu)


tool_btn.setMenu(menu)
tool_btn.setPopupMode(QToolButton.InstantPopup)
############################给工具按钮设置菜单###############################



###########################################################
tool_btn.triggered.connect(lambda action:print("点击了 菜单下的action",action))


###########################################################





#展示控件
window.show()

#3,进入消息循环
sys.exit(app.exec_())
View Code

 

如何区分不同的action 呢?

其实每个action 在添加的时候都都可以绑定一个任意的数据,(使用 setData() 给action添加数据)

然后,我们可以在triggered信号连接的函数中的action.data()  来进行判断具体是哪个action.

 

通过给action 绑定数据来判断具体是哪个行为

 1 from PyQt5.Qt import * #刚开始学习可以这样一下导入
 2 import sys
 3 #1,创建app
 4 app  = QApplication(sys.argv)
 5 
 6 
 7 #2,控件的操作:
 8 #创建控件
 9 window = QWidget()
10 
11 
12 #设置控件
13 window.setWindowTitle("QCommandLinkButton功能作用")
14 window.resize(500,500)
15 
16 tool_btn = QToolButton(window)
17 
18 tool_btn.setIcon(QIcon("icon.ico"))
19 tool_btn.setIconSize(QSize(50,50))
20 
21 tool_btn.setAutoRaise(True)
22 #当鼠标放上去的时候,会有自动提升的效果
23 
24 
25 ############################给工具按钮设置菜单###############################
26 
27 # btn = QPushButton(window)
28 # btn.setFlat(True)
29 # btn.move(100,100)
30 # btn.setText("菜单")
31 
32 menu = QMenu(tool_btn)
33 
34 sub_menu = QMenu(menu)
35 sub_menu.setTitle("子菜单")
36 relative_action  = QAction("最近打开")
37 sub_menu.addAction(relative_action)
38 
39 
40 new_action = QAction("新建")
41 new_action.setData("new")
42 menu.addAction(new_action)
43 
44 open_action = QAction("打开")
45 open_action.setData("open")
46 menu.addAction(open_action)
47 
48 menu.addSeparator()
49 menu.addMenu(sub_menu)
50 
51 
52 tool_btn.setMenu(menu)
53 tool_btn.setPopupMode(QToolButton.InstantPopup)
54 ############################给工具按钮设置菜单###############################
55 
56 
57 
58 ##########################通过给action 绑定数据来区分不同action#################################
59 def tool_btn_triggered_slot(action):
60     if action.data()  == "new":
61         print("你点击的是新建")
62     elif action.data() == "open":
63         print("你点击的是打开")
64 
65 
66 tool_btn.triggered.connect(tool_btn_triggered_slot)
67 
68 ##########################通过给action 绑定数据来区分不同action#################################
69 
70 
71 #展示控件
72 window.show()
73 
74 #3,进入消息循环
75 sys.exit(app.exec_())
View Code

这种方式比 针对每个行为绑定具体的槽函数好的多!

 

总结:

QToolButton 讲完了,下面是按钮控件中的   QRadioButton :https://www.cnblogs.com/zach0812/p/11372228.html

 

posted @ 2019-08-18 13:58  Zcb0812  阅读(2196)  评论(0编辑  收藏  举报