PYQT5(07)-基本窗口控件-按钮类控件

QAbstractButton

所有按钮类的父类,为抽象类

提供如下状态

isDown()提示按钮是否被按下
isChecked()提示按钮是否已经标记
isEnable()提示按钮是否可以被用户点击
isCheckAble()提示按钮是否为可标记的
setAutoRepeat()设置按钮是否在用户长按时可以自动重复执行

提供如下信号

Pressed当鼠标指针在按钮上并按下左键时触发该信号
Rcleased当鼠标左键被释放时触发该信号
Clicked当鼠标左键被按下然后释放时,或者快捷键被释放时触发该信号
Toggled当按钮的标记状态发生改变时触发该信号

QPushButton

常用方法

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

代码示例

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


class Form(QDialog):
    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        layout = QVBoxLayout()

        self.btn1 = QPushButton("Button1")
        # 设置按钮已经被选中,保持已点击和释放状态
        self.btn1.setCheckable(True)
        # 在按钮状态之间进行切换
        self.btn1.toggle()
        # 通过lambda的方式来传递额外的参数btn1,将clicked信号发送给槽函数whichbtn()
        self.btn1.clicked.connect(lambda: self.whichbtn(self.btn1))
        # 当点击这个按钮时,将clicked信号发送给槽函数btnstate(),通过btn.isChecked
        # 来获得按钮是否被点击或释放的状态。
        self.btn1.clicked.connect(self.btnstate)
        layout.addWidget(self.btn1)

        self.btn2 = QPushButton('image')
        self.btn2.setIcon(QIcon(QPixmap("./images/python.png")))
        self.btn2.clicked.connect(lambda: self.whichbtn(self.btn2))
        layout.addWidget(self.btn2)
        self.setLayout(layout)

        self.btn3 = QPushButton("Disabled")
        # 按钮禁用
        self.btn3.setEnabled(False)
        layout.addWidget(self.btn3)

        self.btn4 = QPushButton("&Download")
        self.btn4.setDefault(True)
        self.btn4.clicked.connect(lambda: self.whichbtn(self.btn4))
        layout.addWidget(self.btn4)
        self.setWindowTitle("Button demo")

    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)
    btnDemo = Form()
    btnDemo.show()
    sys.exit(app.exec_())

 QRadioButton

setCheckable()设置按钮是否已经被选中,可以改变单选钮的选中状态,如果设置为True,则表示单选钮将保持已点击和释放状态
isChecked()返回单选钮的状态。返回值为True或False
setText()设置单选钮的显示文本
text()返回单选钮的显示文本

 代码示例

# -*- coding: utf-8 -*-

'''
    【简介】
	PyQt5中QRadio例子
   
  
'''

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


class Radiodemo(QWidget):
    def __init__(self, parent=None):
        super(Radiodemo, self).__init__(parent)

        # 定义一个容器
        select_gb = QGroupBox("123")
        layout1 = QHBoxLayout()

        self.btn1 = QRadioButton("Button1", select_gb)
        self.btn1.setChecked(True)
        self.btn1.toggled.connect(lambda: self.btnstate(self.btn1))
        layout1.addWidget(self.btn1)

        self.btn2 = QRadioButton("Button2", select_gb)
        self.btn2.toggled.connect(lambda: self.btnstate(self.btn2))
        layout1.addWidget(self.btn2)

        self.btn3 = QRadioButton("Button3", select_gb)
        self.btn3.toggled.connect(lambda: self.btnstate(self.btn3))
        layout1.addWidget(self.btn3)

        select_gb.setLayout(layout1)  # 定义GroupBox的布局管理器

        select_gb2 = QGroupBox()
        layout2 = QHBoxLayout()
        self.btn4 = QRadioButton("Button4")
        layout2.addWidget(self.btn4)

        self.btn5 = QRadioButton("Button5")
        layout2.addWidget(self.btn5)

        select_gb2.setLayout(layout2)

        layout3 = QVBoxLayout()
        layout3.addWidget(select_gb)
        layout3.addWidget(select_gb2)

        self.setLayout(layout3)
        self.setWindowTitle("RadioButton demo")

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

        if btn.text() == "Button2":
            if btn.isChecked() == True:
                print(btn.text() + " is selected")
            else:
                print(btn.text() + " is deselected")

        if btn.text() == "Button3":
            if btn.isChecked() == True:
                print(btn.text() + " is selected")
            else:
                print(btn.text() + " is deselected")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    radioDemo = Radiodemo()
    radioDemo.show()
    sys.exit(app.exec_())

 QCheckBox

带文本标签的复选框

 常用方法

setChecked()设置复选框的状态,设置为True时表示选中复选框,设置为False时表示取消选中复选框
setText()设置复选框的显示文本
text()返回复选框的显示文本
isChecked()检查复选框是否被选中
setTriState()设置复选框为一个三态复选框

 三台复选框的三种状态

名称含义
Qt.Checked2组件没有被选中(默认值)
Qt.PartiallyChecked1组件被半选中
Qt.Unchecked0组件被选中

代码示例

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


class CheckBoxDemo(QWidget):

    def __init__(self, parent=None):
        super(CheckBoxDemo, self).__init__(parent)

        groupBox = QGroupBox("Checkboxes")
        # 是否去掉边框
        groupBox.setFlat(False)

        layout = QHBoxLayout()
        self.checkBox1 = QCheckBox("&Checkbox1")
        self.checkBox1.setChecked(True)
        self.checkBox1.stateChanged.connect(lambda: self.btnstate(self.checkBox1))
        layout.addWidget(self.checkBox1)

        self.checkBox2 = QCheckBox("Checkbox2")
        self.checkBox2.toggled.connect(lambda: self.btnstate(self.checkBox2))
        layout.addWidget(self.checkBox2)

        self.checkBox3 = QCheckBox("tristateBox")
        self.checkBox3.setTristate(True)
        self.checkBox3.setCheckState(Qt.PartiallyChecked)
        self.checkBox3.stateChanged.connect(lambda: self.btnstate(self.checkBox3))
        layout.addWidget(self.checkBox3)

        groupBox.setLayout(layout)
        mainLayout = QVBoxLayout()
        mainLayout.addWidget(groupBox)

        self.setLayout(mainLayout)
        self.setWindowTitle("checkbox demo")

    def btnstate(self, btn):
        chk1Status = self.checkBox1.text() + ", isChecked=" + str(self.checkBox1.isChecked()) + ', chekState=' + str(
            self.checkBox1.checkState()) + "\n"
        chk2Status = self.checkBox2.text() + ", isChecked=" + str(self.checkBox2.isChecked()) + ', checkState=' + str(
            self.checkBox2.checkState()) + "\n"
        chk3Status = self.checkBox3.text() + ", isChecked=" + str(self.checkBox3.isChecked()) + ', checkState=' + str(
            self.checkBox3.checkState()) + "\n"
        print(chk1Status + chk2Status + chk3Status)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    checkboxDemo = CheckBoxDemo()
    checkboxDemo.show()
    sys.exit(app.exec_())

 

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您可以使用以下代码来清空当前窗口中所有控件中输入的数据: ```python import PyQt5.QtWidgets as qtw def clear_widgets(widget): """ Recursively clear all widgets in a layout and their children. """ if isinstance(widget, qtw.QLineEdit): widget.clear() elif isinstance(widget, qtw.QTextEdit): widget.clear() elif isinstance(widget, qtw.QComboBox): widget.setCurrentIndex(0) elif isinstance(widget, qtw.QCheckBox): widget.setChecked(False) elif isinstance(widget, qtw.QRadioButton): widget.setChecked(False) elif isinstance(widget, qtw.QGroupBox): widget.setChecked(False) elif isinstance(widget, qtw.QSpinBox): widget.setValue(0) elif isinstance(widget, qtw.QDoubleSpinBox): widget.setValue(0.0) elif isinstance(widget, qtw.QDateEdit): widget.setDate(qtw.QDate.currentDate()) elif isinstance(widget, qtw.QTimeEdit): widget.setTime(qtw.QTime.currentTime()) elif isinstance(widget, qtw.QDateTimeEdit): widget.setDateTime(qtw.QDateTime.currentDateTime()) elif isinstance(widget, qtw.QListWidget): widget.clear() elif isinstance(widget, qtw.QTableWidget): widget.clearContents() widget.setRowCount(0) elif isinstance(widget, qtw.QGridLayout): for i in range(widget.count()): clear_widgets(widget.itemAt(i).widget()) # Example usage: # clear all widgets in the current window clear_widgets(self) ``` 这个函数可以递归地清空一个布局中的所有控件及其子控件中的输入数据。您可以在需要清空数据的地方调用此函数,例如在一个按钮的点击事件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AdolphW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值