按钮式用来给用户点击,来完成某一种操作的控件,一般为矩形,例如登录按钮、注册按钮、关闭按钮等。继承自QAbstractButton类,也就是说在上一节学习的所有QAbstractButton功能QPushButton都可以使用。该控件也有自己的一些特定功能,例如构造函数、设置菜单、扁平化以及默认处理。

基类QAbstractButton的八大通用按钮功能_QAbstractButton共性特点_PyQt学习笔记(三十一)

创建按钮控件

  • QPushButton() : 创建一个无父控件的按钮控件
  • QPushButton(parent):创建按钮的同时,设置他的父控件
  • QPushButton(text,parent):创建控件的同时,设置提示文本以及父控件
  • QPushButton(icon,text,parent):创建控件的同时,设置控件的图标、提示文本以及父控件
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("按钮的功能")  # 标题
window.resize(500, 500)                     # 窗口的大小
window.move(400, 200)                       # 窗口初次显示的位置

# 创建其他控件
# btn = QPushButton()  # 创建按钮,无父控件则认为是顶层控件,需要show来展示

# btn = QPushButton(window)  # 创建的同时赋予父对象
# btn.setText("xxx")  # 按钮设置提示文本
btn = QPushButton("xxxx", window)  # 同时设置文本以及父对象

# 设置图标
btn.setIcon(QIcon("飞机.png"))
btn2 = QPushButton(QIcon("飞机.png"), "xxxx", window)  # 也可以在设置按钮的时候同时设置图标、文本、父对象
btn2.move(50, 50)

window.show()                               # 显示窗口,不然啥也没有

sys.exit(app.exec_())

创建的按钮

设置菜单

可以设置点击按钮时弹出的菜单,供用户选择。

API:

  • setMenu(QMenu) :设置菜单
  • menu() :获取菜单
  • showMenu():展示菜单

补充API:

  • 添加子菜单:addMenu(QMenu)
  • 添加分割线:addSeparator()
  • 添加行为动作:addAction(QAction)
  • QMenu控件设置:
    • setTitle(str)
    • setIcon(QIcon)
  • QAction设置:
    • setText(str)
    • setIcon(QIcon)
    • 信号:triggered

设置菜单示例:点击按钮,然后出现下拉:

点击按钮,出现下拉选项

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("按钮的功能")  # 标题
window.resize(500, 500)  # 窗口的大小
window.move(400, 200)  # 窗口初次显示的位置

# 创建其他控件
# btn = QPushButton()  # 创建按钮,无父控件则认为是顶层控件,需要show来展示

# btn = QPushButton(window)  # 创建的同时赋予父对象
# btn.setText("xxx")  # 按钮设置提示文本
btn = QPushButton("xxxx", window)  # 同时设置文本以及父对象

# 设置图标
btn.setIcon(QIcon("飞机.png"))

# 设置菜单
menu = QMenu()
# 子菜单:最近打开
# 行为动作: 新建、打开、退出、分割线
btn.setMenu(menu)
# new_action = QAction()
# new_action.setText("新建")
# new_action.setIcon(QIcon("飞机.png"))
new_action = QAction(QIcon("飞机.png"), "新建", menu)
new_action.triggered.connect(lambda: print("新建被按下"))

open_action = QAction(QIcon("飞机.png"), "打开", menu)
open_action.triggered.connect(lambda: print("打开被按下"))

quit_action = QAction(QIcon("飞机.png"), "退出", menu)
quit_action.triggered.connect(lambda: print("退出被按下"))

# 创建子菜单
open_recent_menu = QMenu(menu)
open_recent_menu.setTitle("最近打开")

file_action = QAction("01.PyQt5的学习笔记(一)")
open_recent_menu.addAction(file_action)

menu.addAction(new_action)
menu.addAction(open_action)
menu.addSeparator()   # 添加分割线
menu.addAction(quit_action)

menu.addMenu(open_recent_menu)

window.show()  # 显示窗口,不然啥也没有

sys.exit(app.exec_())

显示效果

几个注意点:

  • 行为动作需要用triggered信号来连接槽函数,例如new_action.triggered.connect(lambda: print("新建被按下"))
  • 子菜单设置名称是setTitle,而不是setText,具体参考上面的“最近打开”

按钮扁平化

  • setFlat(True) 设置扁平化
  • isFlat() 判断是否扁平化

需要注意的是,设置扁平化之后,设置按钮的背景颜色也会失效。

按钮的扁平化

默认处理(不常用)

  • setAutoDefault(bool)

    设置为自动默认按钮

    autoDefault():是否是自动默认按钮

  • setDefault(bool)

    直接设置某个按钮为默认按钮

    isDefault():是否是默认按钮

自定义右击菜单

  • setContextMenuPolicy(Qt.CustomContextMenu)

  • Qt.DefaultContextMenu :调用对象方法contextMenuEvent()

  • Qt.CustomContextMenu :发射信号

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys


class Window(QWidget):
    def contextMenuEvent(self, evt):  # 右击窗口会调用这个方法
        print("展示菜单")
        # 设置菜单
        menu = QMenu(self)

        new_action = QAction(QIcon("飞机.png"), "新建", menu)
        new_action.triggered.connect(lambda: print("新建被按下"))

        open_action = QAction(QIcon("飞机.png"), "打开", menu)
        open_action.triggered.connect(lambda: print("打开被按下"))

        quit_action = QAction(QIcon("飞机.png"), "退出", menu)
        quit_action.triggered.connect(lambda: print("退出被按下"))

        # 创建子菜单
        open_recent_menu = QMenu(menu)
        open_recent_menu.setTitle("最近打开")

        file_action = QAction("01.PyQt5的学习笔记(一)")
        open_recent_menu.addAction(file_action)

        menu.addAction(new_action)
        menu.addAction(open_action)
        menu.addSeparator()  # 添加分割线
        menu.addAction(quit_action)

        menu.addMenu(open_recent_menu)

        menu.exec_(evt.globalPos())  # 右击展示菜单,并确定位置


# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = Window()
window.setWindowTitle("按钮的功能")  # 标题
window.resize(500, 500)  # 窗口的大小
window.move(400, 200)  # 窗口初次显示的位置

# 右击菜单

window.show()  # 显示窗口,不然啥也没有

sys.exit(app.exec_())

自定义的右键菜单


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/QPushButton.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 08 月 01 日
如果觉得我的文章对你有用,请随意赞赏