pyqt5学习之QAbstractbutton

QAbstractbutton是按钮类抽象的基类,无法使用只能通过子类去实现他所拥有的功能

简单例子

from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)

window = QWidget()

window.setWindowTitle('QAbstractButton')
window.resize(500, 500)

class btn(QAbstractButton):
    def paintEvent(self, evt):
        # 1.创建一个画家, 画在什么地方
        painter = QPainter(self)

        # 2 给画家一个笔
        # 2.1 创建一个笔
        pen = QPen(QColor(111, 200, 20), 5)

        # 2.2 给画家一个笔
        painter.setPen(pen)

        # 3. 画家画
        painter.drawText(25, 40, self.text())

        painter.drawEllipse(0, 0, 100, 100)

btn = btn(window)

btn.setText('xxx')
btn.resize(100, 100)
btn.pressed.connect(lambda :print("点击了这个按钮"))

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

例子展示:

  1. 文本设置
  2. 图片设置
  3. 快捷键设置
  4. 自动重复
  5. 按钮状态
  6. 排他性
  7. 设置有效区域
from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle('按钮的功能测试-抽象类')
window.move(200, 200)
window.resize(500, 500)
# window.setFixedSize(500, 500)  # 设定固定尺寸



# *************文本操作***************开始
# btn = QPushButton(window)
# btn.setText('1')  # 设置提示文本
# def plus_one():
#     print('+1')
#     num = int(btn.text()) + 1
#     btn.setText(str(num))
#
# btn.pressed.connect(plus_one)
# *************文本操作***************结束



# *************图标操作***************开始
# btn = QPushButton(window)
# icon = QIcon('dp.png')  # 添加图片
# # btn.setIcon(icon)  # 按钮设置图片;方式一
# btn.setIcon(QIcon('dp.png'))  # # 按钮设置图片;方式二
#
# size = QSize(50, 50)
# # btn.setIconSize(size)  # 设置图片大小;方式一
# btn.setIconSize(QSize(50, 50))  # 设置图片大小;方式二
#
# print(btn.icon()) # 获取图标
# print(btn.iconSize())  #获取图标大小
# *************图标操作***************结束



# *************快捷键的设定***************开始
# btn = QPushButton(window)
# btn.setText('按钮')
# btn.pressed.connect(lambda :print('按钮被点击了'))
# btn.setShortcut('a')  # 设置快捷键
# btn.setText('a&b')  # 有&自动设置快捷键
# *************快捷键的设定***************结束



# *************自动重复***************开始
# 自动重复的意思是按钮一直按着不放,就会一直执行槽函数
# btn = QPushButton(window)
# btn.setText('按钮')
# btn.setAutoRepeat(True)  # 设置自动重复
# btn.setAutoRepeatDelay(2000)  # 设置自动重复检测间隔,毫秒
# btn.setAutoRepeatInterval(1000)  # 设置初次检测延迟,毫秒
# print(btn.autoRepeat())
# print(btn.autoRepeatDelay())
# print(btn.autoRepeatInterval())
# def cao():
#     print(1)
# btn.clicked.connect(cao)
# *************自动重复***************结束



# *************按钮状态***************开始
# 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-colour: red;}')
#
# # #s设置按下状态
# # push_button.setDown(True)
# # radio_button.setDown(True)
# # checkbox.setDown(False)
# # print(push_button.isDown())
# # print(radio_button.isDown())
# # print(checkbox.isDown())
#
# # # 设置按钮是否可以被选中
# # push_button.setCheckable(True)
# # print(push_button.isCheckable())
#
# push_button.setEnabled(False)  # 设置按钮不能使用
# *************按钮状态***************结束


# *************排他性设置***************开始
# # 在同一个控件具有排他性
# for i in range(0, 3):
#     btn = QCheckBox(window)
#     btn.setText('btn'+str(i))
#     btn.move(50*i, 50*i)
#
#     btn.setAutoExclusive(True)

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


# *************按钮模拟点击***************开始
# btn = QPushButton(window)
# btn.setText('这是按钮')
# btn.move(200, 200)
# btn.pressed.connect(lambda :print("点击了这个按钮"))
# btn.animateClick(2000)  # 设置模拟点击
# *************按钮模拟点击***************结束



# *************设置有效区域***************开始
#通过重写hitButton(QPoint)方法,有效返回Ture;无效返回False
#设置一个圆形区域
# 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))
#         if distance < self.width() / 2:
#             return True
#
#         # 如果距离 < 半径  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.clicked.connect(lambda value: print("按钮选中状态发生了改变", value))
# *************设置有效区域***************结束

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

 

posted @ 2020-03-16 13:44  墨色无墨  阅读(246)  评论(0编辑  收藏  举报