QPushButton菜单设置

1、QPushButton()的特定功能:菜单的设置,当我们点击按钮时,会显示一系列的下拉菜单。

2、当用户点击行为会像外界会发出信号。

import sys
from PyQt5.Qt import *

app = QApplication(sys.argv)
window = QWidget()

btn = QPushButton("xxx", window)

# 菜单的设置
# 首先创建一个menu对象
menu = QMenu()
# menu后可以添加行为、分割线、图标、子菜单等,可以进入类中查看方法
# 子菜单 最近打开
# 行为动作 新建 打开 分割线 退出
# 方案一
# new_action = QAction()
# new_action.setText("新建")
# 方案二
new_action = QAction("新建", menu)
# 监听行为的信号
new_action.triggered.connect(lambda: print("新建文件"))
open_action = QAction("打开", menu)
open_action.triggered.connect(lambda: print("打开文件"))
exit_action = QAction("退出", menu)
exit_action.triggered.connect(lambda:print("退出文件"))

# 子菜单
oprn_recent_menu = QMenu(menu)
oprn_recent_menu.setTitle("最近打开")
file_action = QAction("python-pyqt")
oprn_recent_menu.addAction(file_action)

menu.addAction(new_action)
menu.addAction(open_action)
menu.addSeparator()
menu.addMenu(oprn_recent_menu)

menu.addAction(exit_action)

# 给按钮后添加菜单
btn.setMenu(menu)
# 菜单的获取
print(btn.menu())

window.setWindowTitle("按钮的功能")
window.resize(500, 500)

window.show()
# 菜单的显示
menu.show()
sys.exit(app.exec_())

3、边框扁平化:直接调用setFlat(bool)方法。当按钮设置为扁平状,则其没有背景颜色。

btn.setStyleSheet("background-color: red")
# 将按钮设置为扁平状
btn.setFlat(True)

4、默认按钮的处理:(主要应用)

例如:打开按钮被设置为默认的(带蓝色边框);

 

 自动设置为默认按钮和设置为默认按钮的区别:

# 将按钮设置为自动默认按钮
# 只有当按钮被点击一次之后,他才会是默认按钮
btn.setAutoDefault(True)
print(btn.autoDefault())
# 不需要点击该按钮,一直是自动默认按钮
btn.setDefault(True)

5、右键菜单:通过不同的信号监听不同的消息,做出不同的反应。

右键菜单:当用户点击右键所弹出的菜单。点击右键之后会默认调用contextMenuEvent()对象方法。需要重写该方法,可以在这个方法中调用菜单。

 将菜单展示在某一个指定位置(给定一个点),需要获取鼠标点击的相对于全局的坐标位置。将局部坐标映射到全局坐标:mapToGlobal()。

import sys
from PyQt5.Qt import *

class Window(QWidget):
    def contextMenuEvent(self, ContextMenuEvent):
        print("调用菜单")
        # 菜单的设置
        # 首先创建一个menu对象
        menu = QMenu(self)
        new_action = QAction("新建", menu)
        # 监听行为的信号
        new_action.triggered.connect(lambda: print("新建文件"))
        open_action = QAction("打开", menu)
        open_action.triggered.connect(lambda: print("打开文件"))
        exit_action = QAction("退出", menu)
        exit_action.triggered.connect(lambda: print("退出文件"))

        # 子菜单
        oprn_recent_menu = QMenu(menu)
        oprn_recent_menu.setTitle("最近打开")
        file_action = QAction("python-pyqt")
        oprn_recent_menu.addAction(file_action)

        menu.addAction(new_action)
        menu.addAction(open_action)
        menu.addSeparator()
        menu.addMenu(oprn_recent_menu)
        menu.addAction(exit_action)
        menu.exec_(ContextMenuEvent.globalPos())

app = QApplication(sys.argv)
window = Window()

btn = QPushButton("xxx", window)
btn.setStyleSheet("background-color: red")

window.setWindowTitle("按钮的功能")
window.resize(500, 500)

def show_menu(point):
    menu = QMenu(window)
    new_action = QAction("新建", menu)
    # 监听行为的信号
    new_action.triggered.connect(lambda: print("新建文件"))
    open_action = QAction("打开", menu)
    open_action.triggered.connect(lambda: print("打开文件"))
    exit_action = QAction("退出", menu)
    exit_action.triggered.connect(lambda: print("退出文件"))

    # 子菜单
    oprn_recent_menu = QMenu(menu)
    oprn_recent_menu.setTitle("最近打开")
    file_action = QAction("python-pyqt")
    oprn_recent_menu.addAction(file_action)

    menu.addAction(new_action)
    menu.addAction(open_action)
    menu.addSeparator()
    menu.addMenu(oprn_recent_menu)
    menu.addAction(exit_action)

    # 使用映射的方法将局部坐标点转换为全局点
    dest_point = window.mapToGlobal(point)
    menu.exec_(dest_point)


# 自定义上下文菜单,会发射一个信号
window.setContextMenuPolicy(Qt.CustomContextMenu)
window.customContextMenuRequested.connect(show_menu)

window.show()
sys.exit(app.exec_())

addSeparator()添加分割线函数。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

。七十二。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值