相关文章推荐
绅士的剪刀  ·  oracle interval type_不 ...·  1 年前    · 
挂过科的打火机  ·  python - django ...·  2 年前    · 
爱看书的小狗  ·  c++ - What is an ...·  2 年前    · 

PyQt5按钮控件

9 个月前 · 来自专栏 PyQt5

PyQt5按钮控件

PyQt5按钮控件是以QAbstractButton为基类的一组不同功能按钮的集合,这些按钮包含普通按钮(QPushbutton)、命令链接按钮(QCommandLinkButton)、工具按钮控件(QToolButton)、单选按钮(QRadioButton)、复选按钮(QCheckBox)和按钮组(QButtonGroup)。

QAbstractButton不能被实例化,也即不能使用QAbstractButton来创建一个按钮。

QAbstractButton按钮控件基类API大全

使用QAbstractButton的子类来实例化一个子类。

当使用QAbstractButton的子类来实例化时,报上图中的错误。这时需要重写QAbstractButton类中的绘制事件paintEvent方法。

如上面代码所示,运行后,并没有绘制按钮。这是因为这个painEvent方法里面缺少一个绘制功能。

为按钮设置图片:

qicon = QIcon('arrowCursor.png')
btn.setIcon(qicon)

设置按钮的快捷键:

方法1:在按钮的文本前面加上&符号;

按ctrl + a 即可输出“按钮事件”;但有一个缺点,如果&后面是中文字符,就无法使用快捷键。

注:测试不行。无法通过ctrl+a,来响应按钮事件。

方法2:使用按钮的setShortsut(‘快捷键字符串’)方法


快捷键字符串不区分大小写,上面写成CTRL+S也可以的。

自动重复:

按钮的autoRepeate()方法,返回只是个布尔值。

设置自动重复:

btn.setAutoRepeat(True),这样设置后,点击按钮,自动重复按钮事件,相当于一直点击按钮。通过setAutoRepeatInterval(1000)方法,来设置重复的时间间隔。

如上面代码所示,按鼠标按键不放,每2秒执行一次槽函数。

设置首次重复的延迟:setAutoRepeatDelay(a)。第1次执行槽函数后,经过a毫秒再次执行槽函数。

按钮状态:

设置按钮为按下的状态,setDown(True)表示默认为按下的状态,第二次按下时恢复为正常状态。

如上图所示,第二个按钮的颜色为鼠标按下的颜色。

创建一个单选框按钮:使用QRadioButton类。

默认具有排他性,只能一个RadioButon为选中状态。

setAutoExclusive(True):设置具有排他性,表示只能选中一个复选框,这样又变成了单选框。将setAutoExclusive(True)代码删除,即为多选框的功能,可以多选。

模拟点击:

在点击按钮之前先模拟点击。

------10秒后------

animateClick(毫秒)也是模拟点击,与Click()的相同点是都是立马点击按钮触发该按钮上的事件,不同的是animateClick(毫秒)在设置的事件后按钮呈现未点击的状态。

按钮的有效区域:

默认整个按钮都是有效区域。设置有效区域时只能在按钮的有效区域内进行设置。比如按钮的大小是20*30大小的,那么这个按钮的有效区域就是20*30,如果想让一个按钮的部分区域可以点击,剩下部分不能点击,就需要使用hitButton(QPoint)来进行设置。

点击按钮btn7,触发hitButton方法。

上面代码设置按钮右半部分可以点击响应事件。

'''
1.提示文本:setText()  text()
2.图像:setIcon()   setIconSize()   icon()   iconSize()
3.快捷键:
4.自动重复:
setAutoRepeat()   设置自动重复
setAutoRepeatInterval(毫秒)   设置自动重复间隔
setAutoRepeatDelay(毫秒)    设置首次自动重复延时
autoRepeat()   获取自动重复
autoRepeatInterval()   获取自动重复间隔
autoRepeatDelay()    获取首次自动重复延时
5.按钮状态:setDown(bool) isDown() isChecked()  setChecked(bool)  isCheckable()  setCheckable()  toggle()全选/反选
继承:QWidget中的:isEnabled() setEnabled(bool)
6.排他性:autoExclusive()  setAutoExclusive(bool)
7.模拟点击:click()  animateClick(ms)
8.按钮点击有效区域设置:hitButton(QPoint)
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle('QAbstractButton - PyQt5中文网')
window.resize(600, 450)
window.move(300, 300)
btn = QPushButton(window)
btn.setText('按钮')
# ==============图标设置=============== # 代码分割线 - 开始
qicon = QIcon('aaa.jpg')
btn.setIcon(qicon)
qsize = QSize(5, 5)
btn.setIconSize(qsize)
print(btn.icon())
print(btn.iconSize())
# ==============图标设置=============== # 代码分割线 - 结束
# ==============快捷键设置=============== # 代码分割线 - 开始
btn.pressed.connect(lambda: print('WWWWW'))
# btn.setText('&aaaa')    # Alt + &后面的首字母
btn.setShortcut('Ctrl+s')  # 这个使用起来更加自由
# ==============快捷键设置=============== # 代码分割线 - 结束
# ==============自动重复=============== # 代码分割线 - 开始
print(btn.autoRepeat())
btn.setAutoRepeat(True)
btn.setAutoRepeatInterval(1000)
btn.setAutoRepeatDelay(3000)
# ==============自动重复=============== # 代码分割线 - 结束
# ==============按钮状态=============== # 代码分割线 - 开始
btn2 = QPushButton(window)
btn2.setText('第二个按钮')
btn2.move(100, 100)
btn2.setStyleSheet('QPushButton:pressed {background-color:green}')
btn2.setDown(True)
btn3 = QRadioButton(window)
btn3.setText('单选按钮')
btn3.move(150, 150)
def tog():
 # btn3.toggle()
 btn3.setChecked(not btn3.isChecked())
btn2.pressed.connect(tog)
# ==============按钮状态=============== # 代码分割线 - 结束
# ==============排他性=============== # 代码分割线 - 开始
btn4 = QCheckBox(window)
btn4.move(200, 200)
btn4.setText('男')
btn4.setAutoExclusive(True)
btn5 = QCheckBox(window)
btn5.move(200, 230)
btn5.setText('女')
btn5.setAutoExclusive(True)
# ==============排他性=============== # 代码分割线 - 结束
# ==============按钮模拟点击=============== # 代码分割线 - 开始
btn6 = QPushButton(window)
btn6.setText('模拟点击')
btn6.move(300, 300)
# btn6.click()
btn6.animateClick(2000)
# ==============按钮模拟点击=============== # 代码分割线 - 结束
# ==============按钮点击有效区域设置=============== # 代码分割线 - 开始
class Btn2(QPushButton):
 def hitButton(self, poi):
 print(poi)
 if poi.x() > self.width() / 2:
 return True
        return False
btn6 = Btn2(window)