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

运行效果如下:
PyQt5之按钮类控件_第1张图片

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

运行效果如下:
PyQt5之按钮类控件_第2张图片

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

运行效果如下:
PyQt5之按钮类控件_第3张图片

你可能感兴趣的:(Python)