文章目录
1、按钮控件
1.1 QAbstractButton
1.1.1 简介
1.1.1.1 描述
- 所有按钮控件的基类
- 提供按钮的通用功能
- 其继承自 QWidget
- 其为 C++ 中的虚继承类,无法实例化对象,只有子类化,才能实例化对象
1.1.1.2 自定义按钮
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
class Btn(QAbstractButton):
# 子类化,使得可以实例化对象,同时要重写paintEvent函数
def paintEvent(self, evt):
# 这个可以自定义一个按钮
# print("绘制按钮")
# 创建一个画家,self 是纸张
painter = QPainter(self)
# 实例化一支笔
pen = QPen(QColor(0, 0, 0), 6) # 颜色,和画笔大小
# 给画家一支笔
painter.setPen(pen)
# 画画
painter.drawText(20, 20, self.text()) # 将字写在按钮上面
painter.drawEllipse(0, 0, 100, 100) # 画一个椭圆
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = Btn(w)
btn.setText("QAbstractButton")
btn.pressed.connect(lambda: print("自定义按钮被按下了"))
w.setVisible(True) # 设置为可见
sys.exit(app.exec_())
1.1.2 提示文本
案例,创建一个按钮,初始文本为1
要求:
- 每点击一次,则让文本数字加1
涉及知识点:
- 按钮控件的创建
- 按钮文本的设置和获取
- 按钮点击信号的监听
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("1") # 设置初始文本
def btn_():
count = int(btn.text())
count += 1 # 加一功能
btn.setText(str(count))
btn.pressed.connect(btn_) # 监听事件
w.setVisible(True) # 设置为可见
sys.exit(app.exec_())
1.1.3 图标相关
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
setIcon(QIcon) # 设置图标
setIconSize(ASize) # 设置图标大小
icon() # 获取图标
iconSize() # 获取图标大小
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("Button") # 设置初始文本
icon = QIcon(r"D:\35005\Pictures\Screenshots\微信图片_20220302175157.jpg") # 设置图片
btn.setIcon(icon) # 设置图标
size = QSize(20, 20) # 输入图标大小
btn.setIconSize(size) # 设置图标大小
w.setVisible(True) # 设置为可见
sys.exit(app.exec_())
1.1.4 设置快捷键
作用:
- 通过指定的快捷键,触发按钮的点击
方式:
- 有提示文本:如果提示文本包含 & 符号,则QAbstractButton会自动创建快捷键
- 无提示文本:
setShortcut("Alt + G")
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.clicked.connect(lambda: print("按钮被按下"))
# btn.setText("a&bc") # 有文本创建,快捷键为 Alt + b
btn.setText("点我")
btn.setShortcut("Alt+G") # 无文本的创建方法
w.show()
sys.exit(app.exec_())
1.1.5 按钮自动重复
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
# 当一直摁下不松开触发重复
setAutoRepeat(bool) # 设置自动重复
setAutoRepeatInterval(ms) # 设置自动重复检测间隔
setAutoRepeatDelay(ms) # 设置初次检测延迟
autoRepeat() # 获取是否自动重复
autoRepeatInterval() # 获取自动重复检测间隔
autoRepeatDelay() # 获取初次检测延迟时长
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("点我")
btn.clicked.connect(lambda: print("点击一次"))
btn.setAutoRepeat(True) # 开启重复
btn.setAutoRepeatInterval(1000) # 设置 1 秒间隔
btn.setAutoRepeatDelay(2000) # 摁下两秒后触发重复
# 获取值
print(btn.autoRepeat())
print(btn.autoRepeatInterval())
print(btn.autoRepeatDelay())
w.show()
sys.exit(app.exec_())
1.1.6 状态检测
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# @author: kun
from PyQt5.Qt import *
import sys
"""
isDown() # 是否按下按钮
setDown(bool) # 设置按钮是否被按下
isChecked() # 是否选中了按钮
setChecked() # 设置按钮是否被选中
isCheckable() # 按钮是否可以被选中
setCheckable(bool) # 设置按钮是否可以被选中
toggle() # 切换选中与非选中状态
# 继承与QWidget中能使用的状态
isEnabled() # 判断按钮是否能点击
setEnabled(bool) # 设置按钮是否能点击
"""
app = QApplication(sys.argv)
w = QWidget()
w.resize(500, 500)
btn = QPushButton(w)
btn.setText("QPushButton")
btn.move(50, 0)
btn2 = QRadioButton(w)
btn2.setText("QRadioButton")
btn2.move(50, 50)
btn3 = QCheckBox(w)
btn3.setText("QCheckBox")
btn3.move(50, 100)
# 把三个按钮全部置为按下状态
btn.setStyleSheet("QPushButton:pressed {background-color: red;}")
btn.setDown(True)
btn2.setChecked