二,控件学习--4.QWidget~QAbstractButton(按钮控件基类,不能直接使用需继承)

继承关系

在这里插入图片描述

学习计划

在这里插入图片描述

常用按钮信号

在这里插入图片描述

# 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(window)
#设置按钮可以被选中,用来看toggled效果
btn.setCheckable(True)
#按键按下时发生
btn.pressed.connect(lambda : print("按钮被按下了"))
#按键释放/按钮按下时移出有效区域时发生
btn.released.connect(lambda : print("按钮鼠标被释放了"))
#按钮在有效区域内点击并释放才会执行
btn.clicked.connect(lambda value: print("按钮被点击", value))
#按钮选中状态发生变化时执行
btn.toggled.connect(lambda value: print("按钮选中状态发生了改变", value))

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

功能作用

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)

# *************1.文本操作***************开始
btn = QPushButton(window)
#给按钮设置文本
btn.setText("1")
def plus_one():
    #获取按钮文本
    num = int(btn.text()) + 1
    #重新设置按钮文本
    btn.setText(str(num))
#信号连接槽函数
btn.pressed.connect(plus_one)
# *************文本操作***************结束

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

2.图标相关

在这里插入图片描述

应用场景

# 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)

# *************2.图标操作***************开始
btn = QPushButton(window)

#设置按键图标
icon = QIcon("close.png")
btn.setIcon(icon)

#设置按键图标大小
size = QSize(50, 50)
btn.setIconSize(size)
print(btn.icon())
print(btn.iconSize())

# *************图标操作***************结束


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

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)

# *************3.快捷键的设定***************开始
btn = QPushButton(window)
btn.pressed.connect(lambda :print("按钮被点击了"))
#有提示文本形式Alt + a
btn.setText("&abc")
#无提示文本形式Alt + a
btn.setShortcut("Alt+a")

# *************快捷键的设定***************结束

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

4.自动重复检测

在这里插入图片描述

应用场景

# 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)

# *************4.自动重复***************开始
btn = QPushButton(window)
btn.pressed.connect(lambda :print("按钮被点击了"))
#开启自动重复
btn.setAutoRepeat(True)
#设置初次检测延迟2秒
btn.setAutoRepeatDelay(2000)
#设置重复执行间隔
btn.setAutoRepeatInterval(1000)
print("是否开启自动重复",btn.autoRepeat())
print("重复执行间隔",btn.autoRepeatInterval())
print("初次检测延迟时间",btn.autoRepeatDelay())

# *************自动重复***************结束

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

5.判断按键状态

在这里插入图片描述

应用场景

# 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)

# *************5.按钮状态***************开始
btn = QPushButton(window)

#创建单纯按钮
push_button = QPushButton(window)
push_button.setText("这是QPushButton")
push_button.move(100, 100)
#创建单选按钮
radio_button = QRadioButton(window)
radio_button.setText("这是一个radio")
radio_button.move(100, 150)
#创建复选按钮
checkbox = QCheckBox(window)
checkbox.setText("这是checkbox")
checkbox.move(100, 200)

#设置按钮按下时变为空色背景
push_button.setStyleSheet("QPushButton:pressed {background-color: red;}")

# 把三个按钮, 置为按下状态
# push_button.setDown(True)
# radio_button.setDown(True)
# checkbox.setDown(True)

#查看三个按钮是否能被选中
# print(push_button.isCheckable())
# print(radio_button.isCheckable())
# print(checkbox.isCheckable())

#设置三个按钮状态被选中
# radio_button.setChecked(True)
# push_button.setChecked(True)
# checkbox.setChecked(True)

#查看三个按钮是否被选中
# print(push_button.isChecked())
# print(radio_button.isChecked())
# print(checkbox.isChecked())

#切换三个按钮的选中状态
# def cao():
#     #转换方式一:使用toggle函数
#     # push_button.toggle()
#     # radio_button.toggle()
#     # checkbox.toggle()

#     #转换方式二:取反再重新赋值
#     push_button.setChecked(not push_button.isChecked())
#     radio_button.setChecked(not radio_button.isChecked())
#     checkbox.setChecked(not checkbox.isChecked())

# #设置按钮可以被选中
# push_button.setCheckable(True)
# #连接按钮与转换状态的槽函数
# btn.pressed.connect(cao)


#设置三个按钮不可用,变成灰度
# push_button.setEnabled(False)
# radio_button.setEnabled(False)
# checkbox.setEnabled(False)

# *************按钮状态***************结束

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

6.按键排他性

在这里插入图片描述

应用场景

# 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)

# *************6.排他性设置***************开始

for i in range(0, 3):
    #创建复选框
    btn = QCheckBox(window)
    #设置复选框文本
    btn.setText("btn" + str(i))
    btn.move(50 * i, 50 * i)

    #设置自动排他性
    btn.setAutoExclusive(True)
    #查看是否设置排他性
    print("是否设置排他性",btn.autoExclusive())
    print("是否可以被选中",btn.isCheckable())

# *************排他性设置***************结束

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

7.按键点击

在这里插入图片描述

应用场景

# 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)

# *************7.按钮模拟点击***************开始

btn = QPushButton(window)
btn.setText("这是按钮")
btn.move(200, 200)
btn.pressed.connect(lambda :print("点击了这个按钮"))

#模拟直接点击,点一下就松开
# btn.click()
#模拟带动画的点击,按住几秒
# btn.animateClick(5000)

# *************按钮模拟点击***************结束

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

8.设置按键有效区域

在这里插入图片描述

应用场景

  • 设置如下图的圆中为按钮有效区域
    在这里插入图片描述
# 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)

# *************8.设置有效区域***************开始
class Btn(QPushButton):
    #根据返回值来判断是否点击了有效的点击区域
    def hitButton(self, point):

        # 通过给定的一个点坐标, 计算与圆心的距离
        yuanxin_x = self.width() / 2
        yuanxin_y = self.height() / 2

        hit_x = point.x()
        hit_y = point.y()

        # ((x1 - x2) 平方 + (y1 - y2) 平方) 开平方
        import math
        distance = math.sqrt(math.pow(hit_x - yuanxin_x, 2) + math.pow(hit_y - yuanxin_y, 2))
        # 如果距离 < 半径  True
        if distance < self.width() / 2:
            return True
        # 点击有效区域外返回 False
        return False

    #绘制内切圆
    def paintEvent(self, evt):
        #绘制之前的配置,设置文本啥的,总之写就带上就完了
        super().paintEvent(evt)
        #创建一个画家
        painter = QPainter(self)
        #给画家一杆笔
        painter.setPen(QPen(QColor(100, 150, 200), 6))
        #让画家画画,内切圆
        painter.drawEllipse(self.rect())

btn = Btn(window)
btn.move(100, 100)
btn.setText("点击")
btn.resize(200, 200)

btn.pressed.connect(lambda : print("按钮被按下了"))

# *************8.设置有效区域***************结束

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值