PyQt5之按钮

1.QAbstractButton

(1) 描述

所有按钮控件的基类,提供按钮的通用功能,继承自QWidget

(2) 功能作用

1)提示文本
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_())
2)图标相关
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_())
3)设置快捷键
# 方法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_())
4)自动重复
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_())

5)状态
isDown() # 是否按下按钮
setDown(bool) # 设置按钮, 是否被按下
isChecked() # 是否选中了按钮
isCheckable() # 按钮是否可以被选中
setCheckable(bool) # 设置按钮, 是否可以被选中
setChecked(bool) # 设置按钮, 是否被选中
toggle() # 切换选中与非选中状态
# 继承于QWidget中的状态
isEnabled()
setEnabled(bool)
6)排他性
# 如果同时存在多个按钮, 而此时所有按钮又设置了排他性,则在同一时刻只能选中一个按钮
autoExclusive() # 是否自动排他,一般按钮都是False, 只有单选按钮是True
setAutoExclusive(bool) # 设置自动排他
7)点击
# 模拟用户点击
click() # 普通点击
animateClick(毫秒) # 动画点击,会出现点击效果
8)设置有效区域

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

(3) 信号

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

2.QPushButton

(1) 描述

用来给用户点击,来完成某种动作的控件,继承自QAbstractButton

(2) 功能作用

1)创建按钮控件
QPushButton() # 创建一个无父控件的按钮控件
QPushButton(parent)	# 创建控件的同时, 设置父控件
QPushButton(text, parent) # 创建控件的同时, 设置提示文本和父控件
QPushButton(icon, text, parent) # 创建控件的同时, 设置图标, 提示文本和父控件
2)菜单
# 可以设置点击按钮弹出菜单
setMenu(QMenu) # 设置菜单
menu() # 获取菜单
showMenu() # 展示菜单
3)边框是否保持扁平
setFlat(bool) # 默认值为False 设置了此属性,则除非按下按钮,否则大多数样式都不会绘制按钮背景
isFlat() # 获取当前按钮边框是否扁平
4)默认处理
setAutoDefault(bool) # 设置为自动默认按钮,点击后设为默认按钮
autoDefault()
setDefault(bool) # 设置为默认按钮
isDefault()

3.QCommandLinkButton

(1) 描述

命令链接是Windows Vista引入的新控件,它的用途类似于单选按钮的用途,因为它用于在一组互斥选项之间进行选择

命令链接按钮不应单独使用,而应作为向导和对话框中单选按钮的替代选项

外观通常类似于平面按钮的外观,但除了普通按钮文本之外,它还允许描述性文本

继承自QPushButton

(2) 功能作用

1)创建命令链接按钮
QCommandLinkButton(parent)
QCommandLinkButton(text, parent)
QCommandLinkButton(text, description ,parent)
2)描述设置
setDescription(str)
description()

4.QToolButton

(1) 描述

提供了一个快速访问按钮

通常是在工具栏内部使用

工具按钮通常不显示文本标签,而是显示图标

继承自QAbstractButton

(2) 功能作用

1)创建按钮
QToolButton(parent: QWidget = None)
2)(继承)设置文本,图标,工具提示
setText(str) # 设置文本
setIcon(QIcon) # 设置图标
setIconSize(QSize) # 设置图标大小
setToolTip(str) # 设置工具提示
# 当文本和图标同时设置时,默认只展示图标
3)按钮样式风格
setToolButtonStyle(Qt.ToolButtonStyle) # 风格取值
"""
Qt.ToolButtonIconOnly # 仅显示图标
Qt.ToolButtonTextOnly # 仅显示文字
Qt.ToolButtonTextBesideIcon # 文本显示在图标旁边
Qt.ToolButtonTextUnderIcon # 文本显示在图标下方 
Qt.ToolButtonFollowStyle # 遵循风格
"""
toolButtonStyle() # 获取风格
4)设置箭头
setArrowType(Qt.ArrowType)
"""
Qt.ArrowType
Qt.NoArrow 无箭头
Qt.UpArrow 向上箭头
Qt.DownArrow 向下箭头
Qt.LeftArrow 向左箭头
Qt.RightArrow 向右箭头
"""
arrowType()
5)自动提升
# 开启后,按钮在鼠标指向时会绘制3D帧
setAutoRaise(bool)
autoRaise()
6)菜单
setMenu(QMenu)
menu()
7)菜单弹出模式
setPopupMode(QToolButton.ToolButtonPopupMode)
"""
QToolButton.ToolButtonPopupMode:
	QToolButton.DelayedPopup 鼠标按住一会才显示,类似于浏览器后退按钮
	QToolButton.MenuButtonPopup 有一个专门的指示箭头,点击箭头才显示
	QToolButton.InstantPopup 点了按钮就显示但点击信号不会发射
"""
popupMode()

(3) 信号

triggered(QAction *action) # 当点击某个action时触发, 并会将action传递出来

5.QRadioButton

(1) 描述

用于进行单选操作,继承自QAbstractButton

(2) 功能作用

创建单选按钮

QRadioButton(parent)
QRadioButton(text, parent)

注:在同一个父组件下的单选按钮会互斥,可将其分为两个父组件或设置两个按钮组

6.QCheckBox

(1) 描述

用于进行多选操作,继承自QAbstractButton

(2) 功能作用

1)创建复选框按钮
QCheckBox(parent=None)
QCheckBox(text, parent=None)
2)设置是否三种状态
# 可分为未选中、部分选中、完全选中
setTristate(bool=True)
isTristate()
3)设置复选状态
setCheckState(Qt.CheckState)
checkState()
"""
Qt.CheckState可选值:
	Qt.Unchecked  该项目未选中
	Qt.PartiallyChecked 部分选中
	Qt.Checked 完全选中
"""

(3) 信号

stateChanged(int state) # 选中或清除选中时, 发射此信号

7.QButtonGroup

(1) 描述

提供一个抽象的按钮容器, 可以将多个按钮划分为一组,继承自QObject

(2) 功能作用

1)创建按钮组
QButtonGroup(parent)
2)添加按钮
addButton(QAbstractButton, id = -1)
# 如果id为-1,则将为该按钮分配一个id。自动分配的ID保证为负数,从-2开始。
# 如果要分配自己的ID,请使用正值以避免冲突
3)查看按钮
buttons() # 查看所有按钮组中的按钮
button(ID) # 根据ID获取对应按钮, 没有则返回None
checkedButton() # 获取选中的那个按钮
4)移除按钮
removeButton(QAbstractButton)
5)绑定和获取ID
setId(QAbstractButton,int)
id(QAbstractButton) # 指定按钮对应的ID,如果不存在此按钮,则返回-1
checkedId() # 选中按钮的ID,如果没有选中按钮则返回-1
6)独占(互斥)设置
setExclusive(bool) # 设置独占
exclusive()

(3) 信号

buttonClicked(int/QAbstractButton) # 当按钮组中的按钮被点击时, 发射此信号
buttonPressed(int/QAbstractButton) # 当按钮组中的按钮被按下时, 发射此信号
buttonReleased(int/QAbstractButton) # 当按钮组中的按钮被释放时, 发射此信号
buttonToggled(QAbstractButton/int, bool) # 当按钮组中的按钮被切换状态时, 发射此信号
"""
注:
如果一个对象向外界提供的信号名称一样, 但参数不一样,外界在使用信号时, 可以使用如下格式进行选择
signal_name[type]
    signal_name
        信号名称
    type
        参数类型
例:group.buttonClicked[int].connect()
"""

你可能感兴趣的:(qt,pyqt)