所有按钮控件的基类,提供按钮的通用功能,继承自QWidget
setText(str) # 设置按钮提示文本
text() # 获取按钮提示文本
案例
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("提示文本")
window.resize(500, 500)
btn = QPushButton(window)
btn.setText("1")
def btn_add():
btn.setText(str(int(btn.text()) + 1))
btn.pressed.connect(btn_add)
window.show()
sys.exit(app.exec_())
setIcon(QIcon("resource/h1.png")) # 设置图标
setIconSize(QSize(w, h)) # 设置图标大小
icon() # 获取图标
iconSize() # 获取图标大小
案例
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("图标相关")
window.resize(500, 500)
btn = QPushButton(window)
btn.setIcon(QIcon('xxx.png'))
btn.setIconSize(QSize(50, 50))
print(btn.icon(), btn.iconSize())
window.show()
sys.exit(app.exec_())
# 方法1
# 如果提示文本包含&符号('&')的, 则QAbstractButton会自动创建快捷键
# 方法2
setShortcut("Alt+G")
案例
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("设置快捷键")
window.resize(500, 500)
btn1 = QPushButton(window)
btn1.setText("我是按钮&a")
btn2 = QPushButton(window)
btn2.setText("我是按钮b")
btn2.move(0, 30)
btn2.setShortcut("Alt+b")
def pressA():
print("按钮a被按下")
def pressB():
print("按钮b被按下")
btn1.pressed.connect(pressA)
btn2.pressed.connect(pressB)
window.show()
sys.exit(app.exec_())
setAutoRepeat(bool) # 设置自动重复
setAutoRepeatInterval(毫秒) # 设置自动重复检测间隔
setAutoRepeatDelay(毫秒) # 设置初次检测延迟
autoRepeat() # 获取是否自动重复
autoRepeatInterval() # 获取自动重复检测间隔
autoRepeatDelay() # 获取初次检测延迟
案例
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("自动重复")
window.resize(500, 500)
btn = QPushButton(window)
btn.setText("1")
def add():
btn.setText(str(int(btn.text()) + 1))
btn.pressed.connect(add)
btn.setAutoRepeat(True)
btn.setAutoRepeatInterval(500)
btn.setAutoRepeatDelay(1000)
window.show()
sys.exit(app.exec_())
isDown() # 是否按下按钮
setDown(bool) # 设置按钮, 是否被按下
isChecked() # 是否选中了按钮
isCheckable() # 按钮是否可以被选中
setCheckable(bool) # 设置按钮, 是否可以被选中
setChecked(bool) # 设置按钮, 是否被选中
toggle() # 切换选中与非选中状态
# 继承于QWidget中的状态
isEnabled()
setEnabled(bool)
# 如果同时存在多个按钮, 而此时所有按钮又设置了排他性,则在同一时刻只能选中一个按钮
autoExclusive() # 是否自动排他,一般按钮都是False, 只有单选按钮是True
setAutoExclusive(bool) # 设置自动排他
# 模拟用户点击
click() # 普通点击
animateClick(毫秒) # 动画点击,会出现点击效果
重写hitButton(QPoint),有效区域返回True,无效区域返回False
案例
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
class Btn(QPushButton):
def hitButton(self, point):
r = self.width() / 2
center_x = self.width()/2
center_y = self.height()/2
distance = ((point.x() - center_x)**2+(point.y()-center_y)**2)**0.5
if distance <= r:
return True
return False
def paintEvent(self, evt):
super().paintEvent(evt)
painter = QPainter(self)
painter.setPen(QPen(QColor(0, 0, 0), 2))
painter.drawEllipse(self.rect())
window = QWidget()
window.setWindowTitle("设置有效区域")
window.resize(500, 500)
btn = Btn(window)
btn.setText("点击")
btn.resize(200, 200)
btn.move(150, 150)
def press():
print("按钮点击")
btn.pressed.connect(press)
window.show()
sys.exit(app.exec_())
pressed() # 鼠标按下信号
released() # 鼠标释放,控件内松开鼠标,鼠标移出控件范围后
clicked(checked = false) # 控件内按下+控件内释放
toggled(bool checked) # 切换信号(一般在单选框或者复选框中使用)
案例
from PyQt5.Qt import *
import sys
app = QApplication(sys.argv)
window = QWidget()
window.setWindowTitle("设置有效区域")
window.resize(500, 500)
btn = QRadioButton(window)
btn.setText("点击")
btn.resize(200, 200)
btn.move(150, 150)
btn.pressed.connect(lambda: print("按钮按下"))
btn.released.connect(lambda: print("按钮释放"))
btn.clicked.connect(lambda: print("按钮点击"))
btn.toggled.connect(lambda: print("按钮切换"))
window.show()
sys.exit(app.exec_())
用来给用户点击,来完成某种动作的控件,继承自QAbstractButton
QPushButton() # 创建一个无父控件的按钮控件
QPushButton(parent) # 创建控件的同时, 设置父控件
QPushButton(text, parent) # 创建控件的同时, 设置提示文本和父控件
QPushButton(icon, text, parent) # 创建控件的同时, 设置图标, 提示文本和父控件
# 可以设置点击按钮弹出菜单
setMenu(QMenu) # 设置菜单
menu() # 获取菜单
showMenu() # 展示菜单
setFlat(bool) # 默认值为False 设置了此属性,则除非按下按钮,否则大多数样式都不会绘制按钮背景
isFlat() # 获取当前按钮边框是否扁平
setAutoDefault(bool) # 设置为自动默认按钮,点击后设为默认按钮
autoDefault()
setDefault(bool) # 设置为默认按钮
isDefault()
命令链接是Windows Vista引入的新控件,它的用途类似于单选按钮的用途,因为它用于在一组互斥选项之间进行选择
命令链接按钮不应单独使用,而应作为向导和对话框中单选按钮的替代选项
外观通常类似于平面按钮的外观,但除了普通按钮文本之外,它还允许描述性文本
继承自QPushButton
QCommandLinkButton(parent)
QCommandLinkButton(text, parent)
QCommandLinkButton(text, description ,parent)
setDescription(str)
description()
提供了一个快速访问按钮
通常是在工具栏内部使用
工具按钮通常不显示文本标签,而是显示图标
继承自QAbstractButton
QToolButton(parent: QWidget = None)
setText(str) # 设置文本
setIcon(QIcon) # 设置图标
setIconSize(QSize) # 设置图标大小
setToolTip(str) # 设置工具提示
# 当文本和图标同时设置时,默认只展示图标
setToolButtonStyle(Qt.ToolButtonStyle) # 风格取值
"""
Qt.ToolButtonIconOnly # 仅显示图标
Qt.ToolButtonTextOnly # 仅显示文字
Qt.ToolButtonTextBesideIcon # 文本显示在图标旁边
Qt.ToolButtonTextUnderIcon # 文本显示在图标下方
Qt.ToolButtonFollowStyle # 遵循风格
"""
toolButtonStyle() # 获取风格
setArrowType(Qt.ArrowType)
"""
Qt.ArrowType
Qt.NoArrow 无箭头
Qt.UpArrow 向上箭头
Qt.DownArrow 向下箭头
Qt.LeftArrow 向左箭头
Qt.RightArrow 向右箭头
"""
arrowType()
# 开启后,按钮在鼠标指向时会绘制3D帧
setAutoRaise(bool)
autoRaise()
setMenu(QMenu)
menu()
setPopupMode(QToolButton.ToolButtonPopupMode)
"""
QToolButton.ToolButtonPopupMode:
QToolButton.DelayedPopup 鼠标按住一会才显示,类似于浏览器后退按钮
QToolButton.MenuButtonPopup 有一个专门的指示箭头,点击箭头才显示
QToolButton.InstantPopup 点了按钮就显示但点击信号不会发射
"""
popupMode()
triggered(QAction *action) # 当点击某个action时触发, 并会将action传递出来
用于进行单选操作,继承自QAbstractButton
创建单选按钮
QRadioButton(parent)
QRadioButton(text, parent)
注:在同一个父组件下的单选按钮会互斥,可将其分为两个父组件或设置两个按钮组
用于进行多选操作,继承自QAbstractButton
QCheckBox(parent=None)
QCheckBox(text, parent=None)
# 可分为未选中、部分选中、完全选中
setTristate(bool=True)
isTristate()
setCheckState(Qt.CheckState)
checkState()
"""
Qt.CheckState可选值:
Qt.Unchecked 该项目未选中
Qt.PartiallyChecked 部分选中
Qt.Checked 完全选中
"""
stateChanged(int state) # 选中或清除选中时, 发射此信号
提供一个抽象的按钮容器, 可以将多个按钮划分为一组,继承自QObject
QButtonGroup(parent)
addButton(QAbstractButton, id = -1)
# 如果id为-1,则将为该按钮分配一个id。自动分配的ID保证为负数,从-2开始。
# 如果要分配自己的ID,请使用正值以避免冲突
buttons() # 查看所有按钮组中的按钮
button(ID) # 根据ID获取对应按钮, 没有则返回None
checkedButton() # 获取选中的那个按钮
removeButton(QAbstractButton)
setId(QAbstractButton,int)
id(QAbstractButton) # 指定按钮对应的ID,如果不存在此按钮,则返回-1
checkedId() # 选中按钮的ID,如果没有选中按钮则返回-1
setExclusive(bool) # 设置独占
exclusive()
buttonClicked(int/QAbstractButton) # 当按钮组中的按钮被点击时, 发射此信号
buttonPressed(int/QAbstractButton) # 当按钮组中的按钮被按下时, 发射此信号
buttonReleased(int/QAbstractButton) # 当按钮组中的按钮被释放时, 发射此信号
buttonToggled(QAbstractButton/int, bool) # 当按钮组中的按钮被切换状态时, 发射此信号
"""
注:
如果一个对象向外界提供的信号名称一样, 但参数不一样,外界在使用信号时, 可以使用如下格式进行选择
signal_name[type]
signal_name
信号名称
type
参数类型
例:group.buttonClicked[int].connect()
"""