🌟想系统化学习 GUI 编程?看看这个:[Python GUI 编程] PySide & PyQt - 学习手册-优快云博客
“自动重复” 是指,当用户点击按钮不松开时,鼠标就会不断的发送信号,从而触发对应的槽函数。
0x01:QAbstractButton 自动重复设置 — 相关方法
0x0101:setAutoRepeat(bool) & autoRepeat()
QAbstractButton 的 setAutoRepeat()
方法可以用于是否启用自动重复,为 True 时启用,反之,则不启用;autoRepeat()
方法则可以用于判断指定按钮是否启用了自动重复:
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
btn = QPushButton()
btn.resize(300, 200)
btn.setText("按钮")
btn.clicked.connect(lambda: print("按钮被点击了"))
btn.setAutoRepeat(True) # 设置按钮是否可以重复点击
print("按钮是否会重复点击:", btn.autoRepeat())
# 3. 展示控件
btn.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())
0x0102:setAutoRepeatInterval() & autoRepeatInterval()
QAbstractButton 的 setAutoRepeatInterval()
可以设置自动重复检测的时间间隔,单位为毫秒;而 autoRepeatInterval()
则可以获得刚刚我们设置的那个时间:
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
btn = QPushButton()
btn.resize(300, 200)
btn.setText("按钮")
btn.clicked.connect(lambda: print("按钮被点击了"))
btn.setAutoRepeat(True) # 设置按钮是否可以重复点击
btn.setAutoRepeatInterval(2000) # 设置重复点击的时间间隔
print("按钮自动重复点击的时间间隔为:", btn.autoRepeatInterval(), "毫秒")
# 3. 展示控件
btn.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())
0x0103:setAutoRepeatDelay() & autoRepeatDelay()
QAbstractButton 的 setAutoRepeatDelay()
可以设置初次检测的延迟;而 autoRepeatDelay()
则可以获取我们设置的这个延迟:
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
btn = QPushButton()
btn.resize(300, 200)
btn.setText("按钮")
btn.clicked.connect(lambda: print("按钮被点击了"))
btn.setAutoRepeat(True) # 设置按钮是否可以重复点击
btn.setAutoRepeatDelay(2000) # 设置按钮重复点击的延迟时间
print("按钮初次检测重复点击延迟为: ", btn.autoRepeatDelay(), "毫秒")
# 3. 展示控件
btn.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())
0x02:QAbstractButton 自动重复设置 — 演示案例
上面这个案例比较简单,直接秒了:
import sys
from PyQt5.Qt import *
# 1. 创建一个应用程序对象
app = QApplication(sys.argv)
# 2. 控件操作
btn = QPushButton()
btn.resize(300, 200)
btn.setText('1')
btn.clicked.connect(lambda: btn.setText(str(int(btn.text()) + 1)))
btn.setAutoRepeat(True)
# 3. 展示控件
btn.show()
# 4. 应用程序的执行,进入到消息循环
sys.exit(app.exec_())