PyQt5学习笔记二----组件---按钮类控件

15 篇文章 0 订阅

QAbstractButton:该类为抽象类,不能实例化,必须由其他的类继承它,来实现不同的功能

常见的按钮类有:QPushButton、QToolButton、QRadiaButton、QCheckBox

按钮类常用的方法如下所示:

isDown()

按钮是否被按下

isChecked()

按钮是否已经标记

isEnable()

按钮是否可以被点击

isCheckAble()

按钮是否可标记

setAutoRepeat()

用户在长按时是否可以自动重复执行

常用信号与槽标记

Pressed

鼠标在按钮上按下左键时触发

Released

鼠标在按钮上释放时触发

Clicked

左键被按下然后释放时,

Toggled

按钮的标记状态发生改变时触发

QPushButton按钮:是一个普通的按钮类,继承QAbstractButton类它的常用方法如下表

setCheckable()

按钮是否被选,设置为True,则保持为已点击和释放状态

toggle()

按钮状态之间进行切换

setIcon()

设置按钮图标

setEnable()

设置按钮是否可用

isChecked()

返回按钮状态

setDefault()

设置按钮默认状态

setText()

设置按钮显示文本

text()

返回按钮文本

案例一:为按钮设置快捷键,假如想为按钮设置快捷键Alt+D 则为按钮设置文本“&Down” 这样 “&D”就是快捷键Alt+D。

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

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)
        self.resize(300,400)
        self.layout=QVBoxLayout()
        self.initUI()

    def initUI(self):
        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.layout.addWidget(self.btn1)

        self.btn2=QPushButton("image")
        self.btn2.setIcon(QIcon("../images/python.jpg"))
        self.btn2.clicked.connect(lambda:self.whichbtn(self.btn2))

        self.layout.addWidget(self.btn2)
        self.setLayout(self.layout)

        self.btn3=QPushButton("Disbaled")
        self.btn3.setEnabled(False)
        self.layout.addWidget(self.btn3)

        self.btn4=QPushButton("&Download") #设置快捷键Alt+D &D
        self.btn4.setDefault(True)
        self.btn4.clicked.connect(lambda:self.whichbtn(self.btn4))
        self.layout.addWidget(self.btn4)
        self.setWindowTitle("Button Demo")

    def btnstate(self):
        if self.btn1.isCheckable():
            print("button pressed")
        else:
            print("button released")

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

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

QRadioButton:提供了可供选择的按钮和文本标签,即单选按钮,一次只能选择一个,类似于 on off ,当该按钮被选为on 或者off时,发送toggled信号。

#按钮类QRadioButton按钮实例
# -*- coding: utf-8 -*-
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)
        self.resize(300,400)
        self.layout=QHBoxLayout()
        self.initUI()

    def initUI(self):
        self.btn1=QRadioButton("Button1")
        self.btn1.setChecked(True) #默认设置为被选中
        self.btn1.toggled.connect(lambda :self.btnstate(self.btn1))
        self.layout.addWidget(self.btn1)

        self.btn2=QRadioButton("Button2")
        self.btn2.toggled.connect(lambda :self.btnstate(self.btn2))
        self.layout.addWidget(self.btn2)
        self.setLayout(self.layout)
        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 __name__=="__main__":
    app=QApplication(sys.argv)
    demo=RadioDemo()
    demo.show()
    sys.exit(app.exec_())

QCheckBox:该类是一组复选框按钮,即可以选择多个选项。该类按钮有三种状态:1.选中、2.半选中、3.未选中。选中的概念为一般时按钮上打勾,未选中则是按钮是个空白框,半选中为按钮整个按钮狂时被黑色填满

常用方法

setChecked()

设置复选框状态,True为选中

setText()

设置复选框文本

text()

返回复选框的文本

isChecked()

返回复选框是否被选中

setTriState()

设置复选框为三态复选框

三态状态分为:

Qt.Checked

值为2

组件没有被选中

Qt.PaetiallyChecked

1

组件被半选中

Qt.Unchecked

0

组件被选中

#按钮类QRadioButton按钮实例
# -*- coding: utf-8 -*-
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)
        self.setWindowTitle("CheckBox Demo")
        #self.resize(300,300)

        self.groupBox=QGroupBox("checkboxes")
        self.groupBox.setFlat(True)
        self.layout=QHBoxLayout()

        self.initUI()
        self.AddWidget()

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

        self.setLayout(self.mainLayout)


    def initUI(self):
        self.checkBox1=QCheckBox("&CheckBox1")
        self.checkBox1.setChecked(True)
        self.checkBox1.stateChanged.connect(lambda :self.btnstate(self.checkBox1))

        self.checkBox2=QCheckBox("CheckBox2")
        self.checkBox2.toggled.connect(lambda :self.btnstate(self.checkBox2))

        self.checkBox3=QCheckBox("CheckBox3")
        self.checkBox3.setTristate(True) #设置三态模式
        self.checkBox3.setCheckState(Qt.PartiallyChecked)
        self.checkBox3.stateChanged.connect(lambda :self.btnstate(self.checkBox3))
    def AddWidget(self):
        self.layout.addWidget(self.checkBox1)
        self.layout.addWidget(self.checkBox2)
        self.layout.addWidget(self.checkBox3)

    def btnstate(self,btn):
        chk1Status=self.checkBox1.text()+", isChecked="+str(self.checkBox1.isChecked() )+", checkstate="+ \
            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+str("---")+chk2Status+"---"+chk3Status)

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

QComboBox :下拉列表框,该类控件是一个集按钮和下拉选项于一体的控件,被称为下拉列表框

常用方法

addItem()

添加一个下拉选项

addItems()

从列表中添加下拉选项

Clear()

删除下拉列表中所有选项

count()

返回下拉选项集合中的数目

currentText()

返回选中选项的文本

itemText(i)

获取索引为 i 的 item 的选项文本

currentIndex()

返回选中项的索引

setItemText(int index,text)

改变序号为index项的文本

常用信号

Activated

当用户选中一个下拉选项时发射该信号

currentIndexChanged

当下拉选项的索引发生改变时发射该信号

highlighted

当选中一个已经选中的下拉选项时,发射该信号

#按钮类QCheckBox按钮实例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class ComboxDemo(QWidget):
    def __init__(self,parent=None):
        super(ComboxDemo, self).__init__(parent)
        self.setWindowTitle("Combox 例子")
        self.resize(300,90)

        self.layout=QVBoxLayout()
        self.lbl=QLabel("")
        self.cb=QComboBox()
        self.cb.addItem("C")
        self.cb.addItem("C++")
        self.cb.addItems(["java","C#","Python"])
        self.cb.currentIndexChanged.connect(self.selectionchange)
        self.layout.addWidget(self.cb)
        self.layout.addWidget(self.lbl)
        self.setLayout(self.layout)

    def selectionchange(self,i):
        self.lbl.setText(self.cb.currentText())
        print("Item in the list are:")
        for count in range(self.cb.count()):
            print('item '+str(count)+" "+self.cb.itemText(count))
            print("Current index ",i," selection changed ",self.cb.currentText())

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

QSpinBox:该类是一个计数器控件,允许用户选择一个整数值,通过向上、向下按钮或按键上的上下增加减少当前显示的值,也可以输入值。默认情况下取值范围为0~99,每次改变的步长值1

常用方法:

setMinimum()

设置计数器下边界

setMaximum()

设置计数器上边界

setRange()

设置计数器最大值、最小值、步长值

setValue()

设置计数器当前值

Value()

返回计数器当前值

singleStep()

设置计数器步长值

#按钮类QSpinBox按钮实例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class SpinBoxDemo(QWidget):
    def __init__(self,parent=None):
        super(SpinBoxDemo, self).__init__(parent)
        self.setWindowTitle("QSpinBox")
        self.resize(300,100)

        layout=QVBoxLayout()
        self.ll=QLabel("")
        self.ll.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.ll)
        self.sp=QSpinBox()
        layout.addWidget(self.sp)
        self.sp.valueChanged.connect(self.valuechange)
        self.setLayout(layout)
    def valuechange(self):
        self.ll.setText("current value: "+str(self.sp.value()))

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

QSlider滑动条:该控件提供了一个垂直或水平的滑动条。是一个控制有界值的控件。允许用户垂直或者水平在某一范围拖动。

常用方法

setMinimum()

设置最小值

setMaxmum()

设置最大值

setSingleStep()

设置递增步长值

setValue()

设置滑动控件的值

value()

获得滑动控件值

setTickInterval()

设置刻度间隔

setTickPosition()

设置刻度标记位置

常用信号

valueChanged

当滑块值发生变化时

sliderPressed

当用户按下滑块时

sliderMoved

当用户拖动滑块时

sliderReleased

当用户释放滑块时

#按钮类QSplider按钮实例
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class SliderDemo(QWidget):
    def __init__(self,parent=None):
        super(SliderDemo,self).__init__(parent)
        self.setWindowTitle("滑动条")
        self.resize(300,100)
        layout=QVBoxLayout()
        self.ll=QLabel("Hello PyQT5")
        self.ll.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.ll)

        #水平方向
        self.sl=QSlider(Qt.Horizontal)
        #设置最小值
        self.sl.setMinimum(10)
        #设置最大值
        self.sl.setMaximum(50)
        #步长
        self.sl.setSingleStep(3)
        #设置当前值
        self.sl.setValue(20)
        #刻度位置,刻度在下方
        self.sl.setTickPosition(QSlider.TicksBelow)
        #设置刻度间隔
        self.sl.setTickInterval(5)
        layout.addWidget(self.sl)
        #信号与槽
        self.sl.valueChanged.connect(self.valuechange)
        self.setLayout(layout)
    def valuechange(self):
        print("current slider value=%s "%self.sl.value())
        size=self.value()
        self.ll.setFont(QFont("Arial",size))

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

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值