avuejs 单选按钮不能切换_PyQt5按钮类控件

GUI界面设计中,按钮是最常用的触发执行交互操作的控件。PyQt中根据不同的使用场景将按钮分为不同的表现形式。按钮基类是QAbstractButton。

QAbstractButton提供的状态

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

QAbstractButton提供信号

信号含义
Pressed鼠标指针在按钮上按下左键时触发该信号
Released鼠标左键被释放时触发该信号
Clicked当鼠标左键被按下然后释放时
Toggled当按钮的标记状态发生改变时触发该信号

常见的按钮主要有PushButton、RadioButton、CheckBox、ToolButton和CommandLinkButton。

一、PushButton:按钮控件

eda8e9e4353e2709d51b21c797907657.pngPushButton是PyQt5中最常用的控件,允许用户通过单击来执行操作。可以显示文本,也可以显图像,通常通过文本来描述执行的动作。

QPushButton类常用方法

方法说明
setCheckable()设置按钮是否已经被选中
toggle()在按钮状态之间进行切换
setIcon()设置按钮图标
setEnabled()设置按钮是否可以使用
isChecked()返回按钮的状态,True或False
setDefault()设置按钮的默认状态
setText()设置按钮的显示文本
text()获取按钮所显示文本
setShortcut()设置按钮快捷键,参数可以为键盘中的按键或组合如(Alt+F)

PushButton按钮使用示例

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()
        self.btn1.clicked.connect(lambda: self.whichbtn(self.btn1))
        self.btn1.clicked.connect(self.btnstate)
        layout.addWidget(self.btn1)

        self.btn2 = QPushButton('image')
        self.btn2.setIcon(QIcon(QPixmap("G:/Projectfile/image/two.ico")))
        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_())

05e37ff8c55d2aceb2eb8034835a5a97.png

二、RadioButton:单选按钮控件

745869e786d3e049424ba9de9508ec85.pngRadioButton是单选按钮控件,提供一组可供选择的按钮和文本标签,当用户选择某单选按钮时,同一组的其他按钮不能同时选定。

QRadioButton类常用方法

方法说明
setText()设置单选按钮显示文本
text()获取单选按钮显示的文本
setChecked()或stCheckable()设置单选按钮是否为选中状态
isChecked()返回单选按钮状态

RadioButton常用信号:clicked和toggled,clicked信号在每次单击单选按钮发射,toggled信号则在单选按钮状态改变时发射,使用toggled信号监控单选按钮的选择状态。

RadioButton按钮使用示例

#此示例利用Qt Design工具设计界面,逻辑与业务界面分离技术实现
from PyQt5.Qt import *
from ui_demo5 import Ui_Form  #调用UI界面类

class Window(QMainWindow):
    def __init__(self,parent=None):
        super().__init__(parent)
        self.ui=Ui_Form()  #创建UI对象
        self.ui.setupUi(self)  #构建UI
        self.ui.radioButton.setChecked(True)  #设置“个人”单选按钮默认选中

        self.ui.pushButton.clicked.connect(self.login)
        self.ui.pushButton_2.clicked.connect(self.logout)
        # 为单选按钮的toggled信号绑定自定义槽函数
        self.ui.radioButton.toggled.connect(self.select)


    #登录提示
    def login(self):
        # 使用information()方法弹出信息提示框
        QMessageBox.information(None, "登录信息", "用户名:" + self.ui.lineEdit.text() + "  密码:" + self.ui.lineEdit_2.text(),
                                QMessageBox.Ok)

    #退出
    def logout(self):
        sys.exit()

    # 自定义槽函数,用来判断用户登录身份
    def select(self):

        if self.ui.radioButton.isChecked():  # 判断是否为管理员登录
            QMessageBox.information(None, "提示", "您选择的是 个人  登录", QMessageBox.Ok)
        elif self.ui.radioButton_2.isChecked():  # 判断是否为普通用户登录
            QMessageBox.information(None, "提示", "您选择的是 企业  登录", QMessageBox.Ok)


if __name__ == '__main__':
    import sys
    #1、创建一个应用程序对象
    app=QApplication(sys.argv)

    #2、控件的操作
    #创建控件
    window=Window()
    #展示控件
    window.show()

    #3、应用程序的执行,进入到消息循环
    sys.exit(app.exec_())

#窗口ui界面程序文件ui_demo5.py文件,由demo5.ui通过pyuic5转换。
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(214, 139)
        self.layoutWidget = QtWidgets.QWidget(Form)
        self.layoutWidget.setGeometry(QtCore.QRect(20, 10, 181, 48))
        self.layoutWidget.setObjectName("layoutWidget")
        self.formLayout_2 = QtWidgets.QFormLayout(self.layoutWidget)
        self.formLayout_2.setContentsMargins(0, 0, 0, 0)
        self.formLayout_2.setObjectName("formLayout_2")
        self.label = QtWidgets.QLabel(self.layoutWidget)
        self.label.setObjectName("label")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label)
        self.lineEdit = QtWidgets.QLineEdit(self.layoutWidget)
        self.lineEdit.setObjectName("lineEdit")
        self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.lineEdit)
        self.label_2 = QtWidgets.QLabel(self.layoutWidget)
        self.label_2.setObjectName("label_2")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label_2)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.layoutWidget)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.lineEdit_2)
        self.layoutWidget_2 = QtWidgets.QWidget(Form)
        self.layoutWidget_2.setGeometry(QtCore.QRect(20, 70, 181, 51))
        self.layoutWidget_2.setObjectName("layoutWidget_2")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.layoutWidget_2)
        self.gridLayout_3.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.pushButton_2 = QtWidgets.QPushButton(self.layoutWidget_2)
        self.pushButton_2.setObjectName("pushButton_2")
        self.gridLayout_3.addWidget(self.pushButton_2, 1, 2, 1, 1)
        self.radioButton_2 = QtWidgets.QRadioButton(self.layoutWidget_2)
        self.radioButton_2.setObjectName("radioButton_2")
        self.gridLayout_3.addWidget(self.radioButton_2, 0, 2, 1, 1)
        self.radioButton = QtWidgets.QRadioButton(self.layoutWidget_2)
        self.radioButton.setObjectName("radioButton")
        self.gridLayout_3.addWidget(self.radioButton, 0, 0, 1, 1)
        self.pushButton = QtWidgets.QPushButton(self.layoutWidget_2)
        self.pushButton.setObjectName("pushButton")
        self.gridLayout_3.addWidget(self.pushButton, 1, 0, 1, 1)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_3.addItem(spacerItem, 0, 1, 1, 1)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.gridLayout_3.addItem(spacerItem1, 1, 1, 1, 1)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "系统登录界面"))
        self.label.setText(_translate("Form", "用户名:"))
        self.label_2.setText(_translate("Form", "密  码:"))
        self.pushButton_2.setText(_translate("Form", "退出"))
        self.radioButton_2.setText(_translate("Form", "企业"))
        self.radioButton.setText(_translate("Form", "个人"))
        self.pushButton.setText(_translate("Form", "登录"))

三、CheckBox:复选框按钮

62701fb366278649eb8b0e024b6d3f1e.pngCheckBox提供一组带文本标签的复选框,可以选择多个选项,复选框提供“多选多”的选择。

连接信号stateChabged,只要复选框被选中或者取消选中,都会发射一个stateChabged信号,可以使用isChecked()来查询复选框是否被选中。

另外,它除了为用户提供选中和未选中状态,还提供第三种状态:半选中。如果需要第三种状态,则通过setTristate()来使它生效,并使用checkState()来查询当前的切换状态。

QCheckBox类常用方法

方法说明
setChecked()设置复选框状态
setText()显示文本
text()返回文本
isChecked()检查复选框是否被选中
setTriState()设置复选框为一个三态复选框

三种状态

名称

说明

Qt.Checked

组件没有被选中(值2)
Qt.PartiallyChecked组件被半选中(值1)
Qt.Unchecked组件被选中(值0)

CheckBox按钮使用示例

# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(211, 139)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(22, 19, 101, 16))
        self.checkBox.setObjectName("checkBox")
        self.checkBox_2 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_2.setGeometry(QtCore.QRect(122, 19, 101, 16))
        self.checkBox_2.setObjectName("checkBox_2")
        self.checkBox_3 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_3.setGeometry(QtCore.QRect(22, 49, 101, 16))
        self.checkBox_3.setObjectName("checkBox_3")
        self.checkBox_4 = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_4.setGeometry(QtCore.QRect(122, 49, 101, 16))
        self.checkBox_4.setObjectName("checkBox_4")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(120, 106, 75, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)

        self.pushButton.clicked.connect(self.getvalue)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "设置用户权限"))
        self.checkBox.setText(_translate("MainWindow", "权限1"))
        self.checkBox_2.setText(_translate("MainWindow", "权限2"))
        self.checkBox_3.setText(_translate("MainWindow", "权限3"))
        self.checkBox_4.setText(_translate("MainWindow", "权限4"))
        self.pushButton.setText(_translate("MainWindow", "设置"))

    def getvalue(self):
        oper="" # 记录用户权限
        if self.checkBox.isChecked(): # 判断复选框是否选中
            oper+=self.checkBox.text() # 记录选中的权限
        if self.checkBox_2.isChecked():
            oper +='\n'+ self.checkBox_2.text()
        if self.checkBox_3.isChecked():
            oper+='\n'+ self.checkBox_3.text()
        if self.checkBox_4.isChecked():
            oper+='\n'+ self.checkBox_4.text()
        from  PyQt5.QtWidgets import QMessageBox
        # 使用information()方法弹出信息提示,显示所有选择的权限
        QMessageBox.information(MainWindow, "提示", "您选择的权限如下:\n"+oper, QMessageBox.Ok)


if __name__ == '__main__':
   import sys
   app = QtWidgets.QApplication(sys.argv)
   MainWindow = QtWidgets.QMainWindow() # 创建窗体对象
   ui = Ui_MainWindow() # 创建UI窗体对象
   ui.setupUi(MainWindow) # 调用PyQt窗体的方法对窗体对象进行初始化设置
   MainWindow.show() # 显示窗体
   sys.exit(app.exec_())

c594ba35bdcc7632d658e528f10b5ee6.png

四、ToolButton:工具控件

ce1e6d2df34ce5cb674418c6277fddd3.pngToolButton控件是一个工具按钮,再按钮中提供默认文本"..."和可选的箭头类型。

使用方法与PushButton类似,ToolButton控件可以setToolButtonStyle()方法设置工具按钮的显示样式。

1、Qt.ToolButtonIconOnly:只显示图标

2、Qt.ToolButtonTextOnly:只显示文本

3、Qt.ToolButtonTextBesideIcon:文本显示在图标旁边

4、Qt.ToolButtonTextUnderIcon:文本显示在图标下面

5、Qt.ToolButtonFollowStyle:跟随系统样式

setArrowType()方法设置箭头类类型。

1、Qt.NoArrow:没有箭头

2、Qt.UpArrow:向上的箭头

3、Qt.DownArrow:向下的箭头

4、Qt.LeftArrow:向左的箭头

5、Qt.RightArrow:向右的箭头

self.toolButton.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon) #设置显示样式
self.toolButton.setArrowType(QtCore.Qt.UpArrow) #设置箭头类型
self.toolButton.setIconSize(QtCore.QSize(32,32)) #设置图标大小,默认16*16

五、CommandLinkButton:命令链接按钮

CommandLinkButton控件是命令链接按钮,与PushButton类似,区别在该按钮自定义一个向右的箭头图标。显示为超链接效果。

45637a3b6874719f5aead121d8417025.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值