• 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
  • 相关阅读:
    前端学PHP之错误处理
    mysql数据库学习目录
    前端学数据库之存储
    前端学数据库之函数
    用shell脚本监控进程是否存在 不存在则启动的实例
    在notepad++里面使用正则表达式替换掉所有行逗号前面内容
    mysql合并 两个count语句一次性输出结果的方法
    硬件中断和DPC一直占40-52%左右 解决方法
    解决secureCRT 数据库里没有找到防火墙 '无' 此会话降尝试不通过防火墙进行连接。
    Java eclipse下 Ant build.xml实例详解 附完整项目源码
  • 原文地址:https://www.cnblogs.com/mosewumo/p/12503382.html
Copyright © 2020-2023  润新知