pyqt5-006

QAbstractButton:

  描述:

    所有按钮控件的基类

    提供按钮的通用功能

  继承:

    QWidget

  功能作用:

    提示文本:

      API:

        setText(str): 设置按钮提示文本

        text(): 获取按钮提示文本

      应用场景:

        用户点击按钮前给用户的文本提示:

          确定

          取消等信息

      案列:

        创建一个按钮,初始文本为1:

          要求:每点击一次,则让文本数字增加1

          涉及知识点:

            按钮控件的创建

            按钮文本的设置和获取

            按钮点击信号的监听           

    图标相关:

      API:

        seticon(QIcon('m.png'))

        seticonSize(QSize(w,h)) 设置图标大小

        icon() 获取图标

        iconSize() 获取图标大小

      应用场景: 用户点击按钮前没设置自定义图标,并尝试调整图标大小

    设置快捷键:

      作用: 通过指定的快捷键,触发按钮的点击

      方式1: 有提示文本的    如果提示文本包含&符号('&')的,则QAbstractButton会自动创建快捷键

      方式2: 没有提示文本的   setShortcut('Alt + G')

    自动重复:

      API:

        setAutoRepeat(bool): 设置自动重复

        setAutoRepeatInterval(毫秒) : 设置自动重复检测间隔

        setAutoRepeatDelay(毫秒):设置初次检测延迟

        autoRepeat(): 获取是否自动重复

        autoRepeatInterval(): 获取自动重复检测间隔

        autoRepeatDelay(): 获取初次检测延迟

    应用场景:  当用户点击按钮后,想快速重复性响应时设置

    案列 :

      创建一个按钮,设置初始文本为1:

        要求:当点击按钮不松时,按钮文本数字连续累增

        设计知识点:

          按钮的创建

          按钮文本的设置和获取

          按钮点击信号的监听

          自动重复设置

    状态:

      API:

        isDown() :

          是否按下按钮

          setDown(bool)

        isChecked():

          是否选中了按钮

          isCheckable() :

            按钮是否可以被选中

            setCheckable(bool) : 这只按钮,是否可以被选中

          setChecked(bool) : 设置按钮,是否被选中

          toogle() : 切换选中与非选中状态

        继承于QWidget中的能用状态:

          isEnabled()

          setEnabled(bool)

      应用场景: 判定按钮的状态

      案列: 测试以上API

    排他性:

      概念:

        如果同时存在多个按钮,而此时所有按钮又设置了排他性,则在同一时刻只能选中一个按钮

      API: 

        autoExclusive():

          是否自动排他

          一般按钮都是False,只有单选按钮是True

        setAutoExclusive(bool):

          设置自动排他

      应用场景:

        设定按钮组中的按钮,单选特性

    点击:

      API:

        click(): 普通点击

        animateClick(ms) : 动画点击

        应用场景:

          使用代码触发按钮点击

          会发射相关的信誉

        

    设置有效区域:

      API : 重写hitButton(QPoint):

          有效返回True

          无效返回False

      应用场景:

        指定用户点击某个区域有效:

          而不是单一的矩形

      案列:设置只点击按钮中心的圆形区域才会有效

  信号:

    pressed() : 鼠标按下信号

    released() : 鼠标释放(控件内松开鼠标和鼠标移开控件范围后松开)

    clicked(checked = false) : 控件内按下 + 控件内释放  

    toggled(bool checked) : 切换信号(一般在单选框或者复选框中使用)         

包含Button:

  QPushButton==> QCommandLinkButton

  QRadioButton

  QCheckBox

  QToolButton

 

 

from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.resize(300,300)
window.setWindowTitle('按钮功能测试-抽象类')




# btn = QPushButton(window)
# ********************文本操作*****************
# btn.setText('1')

# def plus_one():
#     print('加一')
#     num = int(btn.text()) + 1
#     btn.setText(str(num))

# btn.pressed.connect(plus_one)
# ********************操作结束*****************

# ********************图标操作*****************
# icon = QIcon('click.jpg')
# btn.setIcon(icon)
# #
# size = QSize(10, 10)
# btn.setIconSize(size)

# print(btn.icon())
# print(btn.iconSize())
# ********************操作结束*****************



# ********************快捷键操作***************
# btn.setText('&abc')
# 键盘按Alt+a 触发点击事件,只允许一个&键

# btn.setShortcut('Alt+a')
# 键盘按Alt+a 触发点击事件

# btn.pressed.connect(lambda : print('按钮点击了'))
# ********************操作结束*****************


# *******************自动重复****************
# btn.setAutoRepeatDelay(2000)
# 设置延迟反应时间
# btn.setAutoRepeatInterval(1000)
# 设置反应间隔
# btn.setAutoRepeat(True)
# print(btn.autoRepeat())
# print(btn.autoRepeatInterval())
# print(btn.autoRepeatDelay())
# *******************重复结束****************

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

# 查看这三个按钮是否可被选中
# push_button.setCheckable(True)
# print(push_button.isCheckable())
# print(radio_button.isCheckable())
# print(checkbox.isCheckable())
#
# push_button.setChecked(True)
# radio_button.setChecked(True)
# checkbox.setChecked(True)

# print(push_button.isChecked())
# print(radio_button.isChecked())
# print(checkbox.isChecked())
#
# def cao():
#     push_button.toggle()
#     radio_button.toggle()
#     checkbox.toggle()

    # push_button.setChecked(not push_button.isChecked())

# btn.pressed.connect(cao)
#
# push_button.setEnabled(False)
# radio_button.setEnabled(False)
# checkbox.setEnabled(False)


# *************************排他性设置**********************
# for i in range(0, 3):
    # btn = QPushButton(window)

    # btn = QRadioButton(window)
    # btn.setText('btn' + str(i))
    # btn.move(50 * i, 50 * i)
    #
    # btn.setAutoExclusive(False)

    # btn.setAutoExclusive(True)
    # 设置排他性,只允许一个进行
    # print(btn.autoExclusive())
    # print(btn.isCheckable())
    # btn.setCheckable(True)

# btn = QPushButton(window)
# btn.setText('btn3')
# btn.move(170,170)
# btn.setCheckable(True)
# *************************排他性结束**********************




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

# btn = QPushButton(window)
# btn.setText('按钮')
# btn.move(120, 150)
# btn.pressed.connect(lambda: print('点击了这个按钮'))

# btn.click()

# btn.animateClick(2000)

# btn2 = QPushButton(window)
# btn2.setText('按钮2')
# def test1():
    # btn.click()
#     btn.animateClick(1000)
# btn2.pressed.connect(test1)
# ***************按钮模拟结束******************

class Btn(QPushButton):
    def hitButton(self, point):
        # print(point)
        if point.x() > self.width() /2:
            return True

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

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

        import math
        distance = math.sqrt(math.pow(hit_x - radio_x, 2) + math.pow(hit_y - radio_y, 2))
        # print(distance)
        # sqrt((x1 - x2 )^2 +(y1 - y2 )^2)
        # 如果是距离 < 半径 True
        # 否则返回False
        if distance < self.width() / 2:
            return True
        return False

    def paintEvent(self, event):
        super().paintEvent(event)
        painter = QPainter(self)
        painter.setPen(QPen(QColor(100, 150, 200), 6))

        painter.drawEllipse(self.rect())



btn = Btn(window)
btn.move(110, 130)
btn.setText('点击')
btn.resize(100, 100)


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

btn.released.connect(lambda : print('鼠标被释放了'))

btn.setCheckable(True)
# 打印按钮的选中状态下面
btn.clicked.connect(lambda value: print('按钮被点击了', value))

btn.toggled.connect(lambda value: print('按钮的选中状态发生了改变', value))
window.show()
sys.exit(app.exec_())

 

posted @ 2020-05-12 18:36  King~~~  阅读(168)  评论(0编辑  收藏  举报