PyQt5之按钮类控件

PyQt5之按钮类控件

按钮的基类是QAbstractButton,提供了按钮的通用性功能。QAbstractButton类为抽象类,不能实例化,必须由其他的按钮类继承QAbstractButton类来实现不同的功能和不同的表现形式。

一、QAbstractButton类

  1. QAbstractButton提供的状态:
状态含义
isDown()提示按钮是否被按下
isChecked()提示按钮是否已经标记
isEnabled()提示按钮是否可以被用户点击
isCheckAble()提示按钮是否为可标记的
setAutoRepeat()设置按钮是否在用户长按时可以自动重复执行
  1. QAbstractButton提供的信号:
信号含义
Pressed当鼠标指针在按钮上并按下左键时触发该信号
Released当鼠标左键被释放时触发该信号
Clicked当鼠标左键被按下然后释放时,或者快捷键被释放时触发该信号
Toggled当按钮的标记状态发生改变时触发该信号

二、QPushButton

QPushButton类继承自QAbstractButton类,其形状是长方形,文本标题或图标可以显示在长方形上。它也是一种命令按钮,可以单击该按钮执行一些命令,或者响应一些事件。

  1. QPushButton类中的常用方法
方法描述
setCheckable()设置按钮是否已经被选中,如果设置为True,则表示按钮将保持已点击和释放状态
toggle()在按钮状态之间进行转换
setIcon()设置按钮上的图标
setEnabled()设置按钮是否可以使用,当设置为False时,按钮变成不可用状态,点击它不会发射信号
isChecked()返回按钮的状态,返回值为True或False
setDefault()设置按钮的默认状态
setText()设置按钮的显示文本
text()返回按钮的显示文本
  1. 为QPushButton设置快捷键

通过按钮名字能为QPushButton设置快捷键,比如名字为“&Download”的按钮,它的快捷键是“Alt+D”。其规则是:想要实现快捷键为“Alt+D”,那么按钮的名字里就要有字母D,并且在字母D前面加上“&”。这个字母一般是按钮名称的首字母,而且在按钮显示时,“&”不会被显示出来,但字母D会显示一条下划线。

QPushButton按钮的使用:

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Win(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(200, 200, 400, 400)
        self.setWindowTitle('QPushButton的使用')

        self.btn1 = QPushButton('Button1')
        self.btn1.setCheckable(True)
        self.btn1.toggle()
        self.btn1.clicked.connect(lambda :self.whichbtn(self.btn1))
        self.btn1.clicked.connect(self.btnstate)

        self.btn2 = QPushButton('image')
        self.btn2.setIcon(QIcon(QPixmap('head1.jpg')))
        self.btn2.clicked.connect(lambda :self.whichbtn(self.btn2))

        self.btn3 = QPushButton('Disabled')
        self.btn3.setEnabled(False)

        self.btn4 = QPushButton('&Download')
        self.btn4.setDefault(True)
        self.btn4.clicked.connect(lambda :self.whichbtn(self.btn4))

        layout = QVBoxLayout()
        layout.addWidget(self.btn1)
        layout.addWidget(self.btn2)
        layout.addWidget(self.btn3)
        layout.addWidget(self.btn4)
        self.setLayout(layout)

    def btnstate(self):
        if self.btn1.isChecked():
            print('button pressed')
        else:
            print('button released')

    def whichbtn(self,btn):
        print('clicked button is'+btn.text())

if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Win()
    form.show()
    sys.exit(app.exec_())

运行效果如下:
在这里插入图片描述

三、QRadioButton

QRadioButton类继承自QAbstractButton类,它提供了一组可供选择的按钮和文本标签,用户可以选择其中一个选项,标签用于显示对应的文本信息。单选按钮是一种开关按钮,可以切换为on或者off,即checkedunchecked。当将单选按钮切换到on或者off时,就会发送toggled信号,绑定这个信号,在按钮状态发生改变时,触发相应的行为。

  1. QRadioButton类中的常用方法
方法描述
setCheckable()设置按钮是否已经被选中,如果设置为True,则表示单选按钮将保持已点击和释放状态
isChecked()返回单选按钮的状态,返回值为True或False
setText()设置单选按钮的显示文本
text()返回单选按钮的显示文本
  1. QRadioButton按钮的使用
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Win(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(200, 200, 400, 400)
        self.setWindowTitle('QRadioButton的使用')

        self.btn1 = QRadioButton('Button1')
        self.btn1.setCheckable(True)
        self.btn1.toggle()
        self.btn1.toggled.connect(lambda :self.btnstate(self.btn1))

        self.btn2 = QRadioButton('Button2')
        self.btn2.toggled.connect(lambda: self.btnstate(self.btn2))

        layout = QHBoxLayout()
        layout.addWidget(self.btn1)
        layout.addWidget(self.btn2)
        self.setLayout(layout)

    def btnstate(self,btn):
        if btn.text() == 'Button1':
            if btn.isChecked():
                print(btn.text()+'is selected')
            else:
                print(btn.text() + 'is deselected')
        if btn.text() == 'Button2':
            if btn.isChecked():
                print(btn.text() + 'is selected')
            else:
                print(btn.text() + 'is deselected')

if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Win()
    form.show()
    sys.exit(app.exec_())

运行效果如下:
在这里插入图片描述

四、QCheckBox

QCheckBox类继承自QAbstractButton类,它提供了一组带文本标签的复选框,用户可以选择多个选项。

  1. QCheckBox类的常用方法
方法描述
setChecked()设置复选框的状态,设置为True时表示选中复选框,设置为False时表示取消选中复选框
isChecked()检查复选框是否被选中
setText()设置复选框的显示文本
text()返回复选框的显示文本
  1. 三态复选框的三种状态
名称(值)含义
Qt.Checked(2)组件没有被选中(默认值)
Qt.PartiallyChecked(1)组件被半选中
Qt.Unchecked(0)组件被选中
  1. QCheckBox的使用
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class Win(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(200, 200, 400, 400)
        self.setWindowTitle('QCheckBox的使用')

        groupbox = QGroupBox('CheckBoxes')
        groupbox.setFlat(True)

        self.cb1 = QCheckBox('CheckBox1')
        self.cb1.setChecked(True)
        self.cb1.stateChanged.connect(lambda :self.btnstate(self.cb1))

        self.cb2 = QCheckBox('CheckBox2')
        self.cb2.toggled.connect(lambda: self.btnstate(self.cb2))

        self.cb3 = QCheckBox('CheckBox3')
        self.cb3.setTristate(True)
        self.cb3.setCheckState(Qt.PartiallyChecked)
        self.cb3.stateChanged.connect(lambda :self.btnstate(self.cb3))

        layout = QHBoxLayout()
        layout.addWidget(self.cb1)
        layout.addWidget(self.cb2)
        layout.addWidget(self.cb3)
        groupbox.setLayout(layout)
        mainLayout = QVBoxLayout()
        mainLayout.addWidget(groupbox)
        self.setLayout(mainLayout)

    def btnstate(self,btn):
        cb1Status = self.cb1.text() + ",isChecked="  + str(self.cb1.isChecked()) + ",checkState=" + str(self.cb1.checkState()) + "\n"
        cb2Status = self.cb2.text() + ",isChecked=" + str(self.cb2.isChecked()) + ",checkState=" + str(self.cb2.checkState()) + "\n"
        cb3Status = self.cb3.text() + ",isChecked=" + str(self.cb3.isChecked()) + ",checkState=" + str(self.cb3.checkState()) + "\n"
        print(cb1Status+cb2Status+cb3Status)
if __name__ == "__main__":
    app = QApplication(sys.argv)
    form = Win()
    form.show()
    sys.exit(app.exec_())

运行效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值