Python-GUI编程-PyQt5-QToolButton

#!/user/bin/env python
#-*-coding: utf-8-*-
#@Time           : 2020/9/15 9:51
#@Author         : GodSpeed
#@File           : QtPushButton_01.py
#@Software       : PyCharm

#0.导入需要的包和模块
from PyQt5.Qt import *
import sys


#1.创建一个应用程序对象
app = QApplication(sys.argv)
#print(app.arguments()) #获取参数
#qApp.arguments() #获取参数



#------------------2.控件操作开始----------------
#2.1 创建窗口对象
window = QWidget()

#2.2 设置控件
#设置窗口标题
window.setWindowTitle('QTpushButton')
#设置窗口大小
window.resize(800,500)
#移动窗口位置
window.move(400,200)

#此处可以创建新的子控件-----------------start---------------
# 文本和图标都显示
# tb = QPushButton(window)
# tb.setText("工具")
# tb.setIcon(QIcon("proxy.png"))
# tb.setIconSize(QSize(80,80))
# #增加提示
# tb.setToolTip("工具按钮")

# 仅显示图标不显示问题,一般用在上方工具栏中
#tb = QToolButton(window)

#tb.setText("工具")
#tb.setIcon(QIcon("proxy.png"))
#tb.setIconSize(QSize(80,80))
#设置风格

#仅显示图标
#tb.setToolButtonStyle(Qt.ToolButtonIconOnly)

#显示在图标旁边
#tb.setToolButtonStyle(Qt.ToolButtonTextBesideIcon)

#文本显示在图标下方
#tb.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)

#后退按钮和前进按钮的工具图标

#箭头按钮
tb1 = QToolButton(window)

#无箭头
tb1.setArrowType(Qt.NoArrow)

#向上的箭头
tb1.setArrowType(Qt.UpArrow)

#向下的箭头
tb1.setArrowType(Qt.DownArrow)

#向左的箭头
tb1.setArrowType(Qt.LeftArrow)

#向右的箭头
tb1.setArrowType(Qt.RightArrow)
tb1.setText("工具")
tb1.setAutoRaise(True) #自动提升
tb1.setToolButtonStyle(Qt.ToolButtonTextUnderIcon)


#一般按钮
btn = QPushButton(window)
btn.setText("一般的按钮")
btn.move(100,100)
#btn.setFlat(True) #会取消凸出效果

# 增加菜单
menu = QMenu(btn)
# 增加子菜单
sub_menu = QMenu(menu)
sub_menu.setTitle("子菜单")
sub_menu.setIcon(QIcon("proxy.png"))
action = QAction(QIcon("proxy.png"),"行为",menu)

# 增加响应槽函数
action.triggered.connect(lambda : print("点击了行为菜单"))

menu.addMenu(sub_menu)
#增加分割线
menu.addSeparator()

#增加行为
menu.addAction(action)

btn.setMenu(menu)


# tb1  QToolButton增加子菜单
# 增加菜单
menu = QMenu(tb1)
# 增加子菜单
sub_menu = QMenu(menu)
sub_menu.setTitle("子菜单")
sub_menu.setIcon(QIcon("proxy.png"))
action = QAction(QIcon("proxy.png"),"行为1",menu)
# 为action绑定数据
action.setData([1,2,3,4,5,6])

action2 = QAction("行为2",menu)
action2.setData({
    
    "name2":"GodSpeed"})
# 为action2绑定数据

# 增加响应槽函数
action.triggered.connect(lambda : print("点击了行为1菜单"))
action2.triggered.connect(lambda : print("点击了行为2菜单"))

menu.addMenu(sub_menu)
#增加分割线
menu.addSeparator()

#增加行为
menu.addAction(action)
menu.addAction(action2)

tb1.setMenu(menu)
#增加一个点击事件槽函数
tb1.clicked.connect(lambda :print("工具被点击111111"))

# 注意默认菜单的弹出方式为长按延时才弹出
# 更改弹出方式
#点击按钮侧面的箭头才显示
tb1.setPopupMode(QToolButton.MenuButtonPopup) #不影响信号槽


#点击按钮就显示
#tb1.setPopupMode(QToolButton.InstantPopup) #影响信号槽

# 增加信号,所有的action都会触发
def do_action(action):
    print('点击了按钮do_action被触发action',action)
    print('do_action: action.data', action.data())

tb1.triggered.connect(do_action)
'''
点击了行为1菜单
点击了按钮do_action被触发action <PyQt5.QtWidgets.QAction object at 0x045CA9B8>

点击了行为2菜单
点击了按钮do_action被触发action <PyQt5.QtWidgets.QAction object at 0x045CA970>

'''


#此处可以创建新的子控件-----------------end---------------

#2.3展示控件
window.show()

# 3.开始执行应用程序并进入消息循环
sys.exit(app.exec_())

猜你喜欢

转载自blog.csdn.net/Narutolxy/article/details/108596387