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_())
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_())
但是,如果我们实在是想在工具按钮上一起显示文字和图标
如下:
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_())
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_())
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_())
我们把上面的代码放到工具按钮上,
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_())
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_())
注意:不同的菜单弹出模式是对工具按钮的信号发射是有影响的!
用的时候自己试下就知道了。
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_())
如何区分不同的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_())
这种方式比 针对每个行为绑定具体的槽函数好的多!
总结:
QToolButton 讲完了,下面是按钮控件中的 QRadioButton :https://www.cnblogs.com/zach0812/p/11372228.html