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_())