PyQt5第四部分-输入类基本控件:QPushButton, QRadioButton, QCheckBox, QToolButton, QComboBox

0 前言

>>返回Python系列文章目录<<

控件内不能含有其他控件的,称为基本控件,为了演示方便,把QGroupBox也放到这里

基本控件继承关系:

QWidget

  • QComboBox
  • QAbstractButton
    • QCheckBox
    • QPushButton
    • QRadioButton
    • QToolButton

1 按钮 QPushButton

QPushButton提供基本按钮,当setCheckable(True)时,启用QPushButton的status属性,具有TrueFalse两种状态。status==True时按钮为蓝色,status==False时按钮为白色。status默认通过左键点击改变,也可以通过toggle()方法改变。status可通过信号clicked.connecttoggled.connect向槽函数传递

1.1 方法列表

QPushButton类说明
self=QPushButton(QIcon, text, parent)创建实例和文字
QIcon->控件图标,QIcon类,可省略
text->字符串,非必须
parent->父控件,使用布局时可省略
self.setText(text)设置控件文字
text->字符串
=self.text()读取控件文字,返回字符串
self.setEnabled(True)设置按钮是否可以使用
self.setCheckable(False)启用时,向槽函数传入status属性
self.toggle()改变status
=self.isChecked()返回按钮的status
self.setDefault(bool)设置默认status
继承自QAbstractButton类的方法
self.clicked.connect(fun)单击信号
self.toggled.connect(fun)按钮status改变时触发槽函数,发送(self, status)
继承自QWidget类的方法
x, y, width, height, ...几何类方法,详见窗口的几何数据

1.2 示例 不带状态的开关按钮

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

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.move(500, 400)
        self.setFixedSize(300, 300)
        self.setWindowTitle('不带状态的开关按钮')
        vlayout = QVBoxLayout()
        self.setLayout(vlayout)
        
        self.label = QLabel('关闭')   # 此处self不能省略,否则无法将label传入槽函数
        self.label.setAlignment(Qt.AlignCenter) # Qt.AlignCenter需要导入PyQt5.QtCore库
        vlayout.addWidget(self.label)
        
        btn = QPushButton(QIcon('switch.jpg'), '开关')
        btn.clicked.connect(self.labelSwitch) # 信号
        vlayout.addWidget(btn)

    def labelSwitch(self):  # 槽函数
        if self.label.text() == '运行中':
            self.label.setText('关闭')
        else:
            self.label.setText('运行中')

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

在这里插入图片描述

1.3 示例 带状态的开关按钮

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


class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.move(500, 400)
        self.setFixedSize(300, 300)
        self.setWindowTitle('带状态的开关按钮')
        vlayout = QVBoxLayout()
        self.setLayout(vlayout)

        self.label = QLabel('运行中')
        self.label.setAlignment(Qt.AlignCenter)
        vlayout.addWidget(self.label)
        
        btn = QPushButton(QIcon('switch.jpg'), '开关')
        btn.setCheckable(True)
        btn.clicked.connect(self.labelSwitch)
        vlayout.addWidget(btn)

    def labelSwitch(self, status):  # 槽函数多了一个status参数
        if status == True:
            self.label.setText('运行中')
        else:
            self.label.setText('关闭')

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

在这里插入图片描述

2 单选按钮 QRadioButton

单选按钮QRadioButton具有True和False两种状态

  • 当有组合框QGroupBox时,一个组合框中只能有1个QRadioButton处于True状态
  • 当没有组合框QGroupBox时,在整个界面中只能有1个QRadioButton处于True状态

QGroupBox属于QWidget的一种,可以放置布局,也可以被放进布局中

2.1 方法列表

QRadioButton类说明
self=QRadioButton(text, parent)创建实例和文字
text->字符串,非必须
parent->父控件,使用布局时可省略
self.setChecked(bool)设置按钮选中状态
=self.isChecked()读取按钮选中状态,返回布尔值
继承自QAbstractButton类的方法
self.setText(text)设置控件文字
text->字符串
=self.text()读取控件文字,返回字符串
self.toggled.connect(fun)按钮状态改变时触发槽函数

2.2 示例 多组状态按钮

import sys
from PyQt5.QtWidgets import *

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.move(500, 400)
        self.setFixedSize(300, 300)
        self.setWindowTitle('显示文件内容')

        layout_h1 = QHBoxLayout()
        btn11 = QRadioButton('Btn11')
        btn11.setChecked(True)
        layout_h1.addWidget(btn11)
        btn12 = QRadioButton('Btn12')
        layout_h1.addWidget(btn12)
        group1 = QGroupBox()
        group1.setLayout(layout_h1)

        layout_h2 = QHBoxLayout()
        btn21 = QRadioButton('Btn21')
        btn21.setChecked(True)
        layout_h2.addWidget(btn21)
        btn22 = QRadioButton('Btn22')
        layout_h2.addWidget(btn22)
        btn23 = QRadioButton('Btn23')
        layout_h2.addWidget(btn23)
        group2 = QGroupBox()
        group2.setLayout(layout_h2)

        layout_v = QVBoxLayout()
        layout_v.addWidget(group1)
        layout_v.addWidget(group2)
        self.setLayout(layout_v)

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

在这里插入图片描述

3 复选按钮 QCheckBox

复选按钮 QCheckBox具有TrueFalse两种状态,可以通过setTriState()方法变为三种状态,这里不讨论

3.1 方法列表

QCheckBox类说明
self=QCheckBox(text, parent)创建实例和文字
text->字符串,非必须
parent->父控件,使用布局时可省略
self.setChecked(bool)设置按钮选中状态
=self.isChecked()读取按钮选中状态,返回布尔值
继承自QAbstractButton类的方法
self.setText(text)设置控件文字
text->字符串
=self.text()读取控件文字,返回字符串
self.toggled.connect(fun)按钮状态改变时触发槽函数

3.2 示例 多组状态切换按钮

import sys
from PyQt5.QtWidgets import *

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.move(500, 400)
        self.setFixedSize(300, 300)
        self.setWindowTitle('显示文件内容')

        layout_h1 = QHBoxLayout()
        btn11 = QCheckBox('Btn11')
        btn11.setChecked(True)
        layout_h1.addWidget(btn11)
        btn12 = QCheckBox('Btn12')
        layout_h1.addWidget(btn12)
        group1 = QGroupBox()
        group1.setLayout(layout_h1)

        layout_h2 = QHBoxLayout()
        btn21 = QCheckBox('Btn21')
        btn21.setChecked(True)
        layout_h2.addWidget(btn21)
        btn22 = QCheckBox('Btn22')
        btn22.setChecked(True)
        layout_h2.addWidget(btn22)
        btn23 = QCheckBox('Btn23')
        layout_h2.addWidget(btn23)
        group2 = QGroupBox()
        group2.setLayout(layout_h2)

        layout_v = QVBoxLayout()
        layout_v.addWidget(group1)
        layout_v.addWidget(group2)
        self.setLayout(layout_v)

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

在这里插入图片描述

4 工具按钮 QToolButton

QToolButton工具按钮,一般在工具栏中显示,工具栏中的工具按钮一般只显示图标,供用户快捷的使用一些功能
在这里插入图片描述

4.1 方法列表

QToolButton类说明
self=QToolButton(parent)创建实例
parent->父控件,使用布局时可省略
self.setIcon(icon)设置图标
icon->QIcon类
self.setToolTip(info)设置鼠标指向时悬浮提示信息
info->字符串
self.setToolButtonStyle()设置PyQt5.QtCore中的显示风格:
Qt.ToolButtonIconOnly: 只显示图标(默认风格)
Qt.ToolButtonTextOnly: 只显示文本
Qt.ToolButtonTextBesideIcon: 文本显示在图标旁
Qt.ToolButtonTextUnderIcon: 文本显示在图标下方
Qt.ToolButtonFollowStyle: 遵循风格
self.setArrowType()设置PyQt5.QtCore中的箭头图标:
Qt.NoArrow: 无箭头
Qt.UpArrow: 上箭头
Qt.DownArrow: 下箭头
Qt.LeftArrow: 左箭头
Qt.RightArrow: 右箭头
self.setAutoRaise(False)设置按键扁平化,光标接触时相应
继承自QAbstractButton类的方法
self.setText(text)设置文本
self.text()读取文本
继承自QWidget类的方法
x, y, width, height, ...几何类方法,详见窗口的几何数据

4.2 示例 箭头按钮

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

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.move(500, 400)
        self.setFixedSize(300, 300)
        self.setWindowTitle('显示文件内容')

        hlayout = QHBoxLayout()
        self.tb = QToolButton()
        self.tb.setArrowType(Qt.UpArrow)
        hlayout.addWidget(self.tb)
        self.setLayout(hlayout)

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

在这里插入图片描述

5 下拉选项 QComboBox

5.1 方法列表

QComboBox类说明
self=QComboBox(parent)创建实例
parent->父控件,使用布局时可省略
self.addItem(text)添加一个下拉选项
self.addItems(list)从列表中添加下拉选项
self.clear()删除下拉选项集合中的所有选项
=self.currentText()返回选中选项的文本,返回字符串
=self.itemText(idx)获取索引为i的item的选项文本,返回字符串
self.currentIndexChanged.connect()当下拉选项的索引发生改变时发射该信号,发送(self, idx)
继承自QWidget类的方法
x, y, width, height, ...几何类方法,详见窗口的几何数据

5.2 QComboBox按钮的使用

import sys
from PyQt5.QtWidgets import *

class MyWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.move(500, 400)
        self.setFixedSize(300, 300)

        vlayout =QVBoxLayout()
        self.setLayout(vlayout)

        self.label = QLabel()
        vlayout.addWidget(self.label)

        self.combo = QComboBox()
        self.combo.addItems(['C', 'C++', 'Python', 'Java'])
        self.combo.currentIndexChanged.connect(self.showLang)
        vlayout.addWidget(self.combo)

    def showLang(self, idx):
        self.label.setText(self.combo.currentText())


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

在这里插入图片描述

>>返回Python系列文章目录<<

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值