QPushButton菜单设置

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

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)方法。当按钮设置为扁平状,则其没有背景颜色。

QPushButton菜单设置_第2张图片

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

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

QPushButton菜单设置_第3张图片

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

 QPushButton菜单设置_第4张图片

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

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

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

QPushButton菜单设置_第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()添加分割线函数。

你可能感兴趣的:(QT学习,python,qt)