二,控件学习--5.QWidget~QAbstractButton~QPushButton

继承关系

在这里插入图片描述

学习计划

在这里插入图片描述

常用信号

在这里插入图片描述

1.创建按钮控件

在这里插入图片描述

应用场景

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

# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("按钮的功能")
window.resize(500, 500)

#创建无父控件按钮,不设置btn1.show的话不单独显示
btn1 = QPushButton()
#创建指定父控件按钮
btn2 = QPushButton(window)
btn2.move(50,50)
#创建指定文本和父控件按钮
btn3 = QPushButton("按钮文本",window)
btn3.move(100,100)
#创建有图标,文本并指定父控件按钮
btn4 = QPushButton(QIcon("xxx.png"),"按钮文本",window)
btn4.move(150,150)

# 2.3 展示控件
window.show()

# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

2.设置快捷键(参考父类的快捷键讲解)

在这里插入图片描述


3.菜单功能

在这里插入图片描述

应用场景

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

# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("按钮的功能")
window.resize(500, 500)

btn = QPushButton(QIcon("xxx.png"),"按钮文本",window)
btn.move(100,100)


# *************菜单的设置***************开始
menu = QMenu(window)

# 子菜单 最近打开
open_recent_menu = QMenu(menu)
open_recent_menu.setTitle("最近打开")
open_recent_menu.setIcon(QIcon("xxx.png"))


# 行为动作 新建  打开  分割线 退出
# new_action = QAction()
# new_action.setText("新建")
# new_action.setIcon(QIcon("xxx.png"))

new_action = QAction(QIcon("xxx.png"), "新建", menu)
new_action.triggered.connect(lambda :print("新建文件"))

open_action = QAction(QIcon("xxx.png"), "打开", menu)
open_action.triggered.connect(lambda :print("打开文件"))

exit_action = QAction("退出", menu)
exit_action.triggered.connect(lambda :print("退出程序"))

#子菜单选项
file_action = QAction("Python-GUI编程-PyQt5")
file_action.triggered.connect(lambda :print("点击了子菜单选项"))

#添加菜单动作
menu.addAction(new_action)
menu.addAction(open_action)
#添加子菜单动作
menu.addMenu(open_recent_menu)
open_recent_menu.addAction(file_action)
#打印分割线
menu.addSeparator()
menu.addAction(exit_action)


#将菜单挂在btn按钮上
btn.setMenu(menu)

#查看菜单内容(返回为菜单对象)
print(btn.menu())

# *************菜单的设置***************结束

# 2.3 展示控件
window.show()


# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

4.边框是否保持扁平(除了破坏样式显示,暂时看来没啥p用)

  • 设置了此属性,则除非按下按钮,否则大多数样式都不会绘制按钮背景
    在这里插入图片描述

应用场景

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

# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("按钮的功能")
window.resize(500, 500)

btn = QPushButton(QIcon("xxx.png"),"按钮文本",window)
btn.move(100,100)

menu = QMenu(window)

# 子菜单 最近打开
open_recent_menu = QMenu(menu)
open_recent_menu.setTitle("最近打开")
open_recent_menu.setIcon(QIcon("xxx.png"))

new_action = QAction(QIcon("xxx.png"), "新建", menu)
new_action.triggered.connect(lambda :print("新建文件"))


#添加菜单动作
menu.addAction(new_action)
menu.addAction(open_action)
#添加子菜单动作
menu.addMenu(open_recent_menu)
open_recent_menu.addAction(file_action)
#打印分割线
menu.addSeparator()
menu.addAction(exit_action)


#将菜单挂在btn按钮上
btn.setMenu(menu)

#查看菜单内容(返回为菜单对象)
print(btn.menu())

# *************菜单的扁平设置***************开始
#设置了此属性,则除非按下按钮,否则大多数样式都不会绘制按钮背景
#如果不设置扁平就会直接显示样式
#设置扁平之后需要点击才会显示样式
btn.setStyleSheet("background-color: red;")
btn.setFlat(True)
print(btn.isFlat())

# *************菜单的扁平设置***************结束
# 2.3 展示控件
window.show()


# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())

5.默认处理(设置默认按钮,没用!就是细节问题,需要用的时候查一下得了)

  • 效果如下图,有个默认的提示按钮,可以直接enter选中,个人认为没啥用,点一下又不会shi~~
    在这里插入图片描述

在这里插入图片描述


本节补充(右键菜单设置-自定义上下文菜单请求信号)

  • 第一种方式:重写contextMenuEvent方法
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys

class Window(QWidget):
    def contextMenuEvent(self, evt):
        print("默认上下文菜单调用这个方法")
        menu = QMenu(self)

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

        # 行为动作 新建  打开  分割线 退出
        new_action = QAction(QIcon("xxx.png"), "新建", menu)
        new_action.triggered.connect(lambda: print("新建文件"))

        open_action = QAction(QIcon("xxx.png"), "打开", menu)
        open_action.triggered.connect(lambda: print("打开文件"))

        exit_action = QAction("退出", menu)
        exit_action.triggered.connect(lambda: print("退出程序"))

        file_action = QAction("Python-GUI编程-PyQt5")

        menu.addAction(new_action)
        menu.addAction(open_action)
        open_recent_menu.addAction(file_action)
        menu.addMenu(open_recent_menu)
        menu.addSeparator()
        menu.addAction(exit_action)

        # 展示菜单位置
        menu.exec_(evt.globalPos())


# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = Window()
# 2.2 设置控件
window.setWindowTitle("按钮的功能")
window.resize(500, 500)


# 2.3 展示控件
window.show()


# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())
  • 第二种方式:设置setContextMenuPolicy
# 0. 导入需要的包和模块
from PyQt5.Qt import *
import sys

# 1. 创建一个应用程序对象
app = QApplication(sys.argv)

# 2. 控件的操作
# 2.1 创建控件
window = QWidget()
# 2.2 设置控件
window.setWindowTitle("按钮的功能")
window.resize(500, 500)

def show_menu(point):
    menu = QMenu(window)

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

    # 行为动作 新建  打开  分割线 退出

    new_action = QAction(QIcon("xxx.png"), "新建", menu)
    new_action.triggered.connect(lambda: print("新建文件"))

    open_action = QAction(QIcon("xxx.png"), "打开", menu)
    open_action.triggered.connect(lambda: print("打开文件"))

    exit_action = QAction("退出", menu)
    exit_action.triggered.connect(lambda: print("退出程序"))

    file_action = QAction("Python-GUI编程-PyQt5")

    menu.addAction(new_action)
    menu.addAction(open_action)
    open_recent_menu.addAction(file_action)
    menu.addMenu(open_recent_menu)
    menu.addSeparator()
    menu.addAction(exit_action)

    # 使用映射方法,将局部point点映射到全局位置(桌面位置)
    dest_point = window.mapToGlobal(point)
    print(dest_point)
    menu.exec_(dest_point)

#更改菜单策略为自定义
window.setContextMenuPolicy(Qt.CustomContextMenu)
window.customContextMenuRequested.connect(show_menu)


# 2.3 展示控件
window.show()


# 3. 应用程序的执行, 进入到消息循环
sys.exit(app.exec_())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值