pyqt5-步长调节器

 

 

继承与   QWidget--->QAbstractSpinBox    

QAbstractSpinBox

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget,QAbstractSpinBox,QPushButton
from PyQt5.QtGui import QValidator

class Myasb(QAbstractSpinBox):  #子类化QAbstractSpinBox
    def __init__(self,parent=None,num="0",*args,**kwargs):
        super().__init__(parent,*args,**kwargs)
        self.lineEdit().setText(num)  #设置初始值
    def stepEnabled(self):   #实现控制上下按钮能用的方法
        #比如 0---100有效
        if int(self.text())==0:
            return QAbstractSpinBox.StepUpEnabled   #上可用
        elif int(self.text())==100:
            return QAbstractSpinBox.StepDownEnabled  #下可用
        elif int(self.text())>100 or int(self.text())<0:
            return QAbstractSpinBox.StepNone   #都不能用
        else:
            return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled  #上下都可用
    def stepBy(self, p_int):  #用户按下步长按钮时,会自动调用这个方法
        #用户按下按钮时的处理方法
        #p_int  用户点击步长按钮时,返回的增量-->1 或 -1
        s=int(self.text())+p_int
        self.lineEdit().setText(str(s))  #给控件中的单行文本编辑框设置文本
    def validate(self, p_str, p_int):   #验证规则
        #p_str   是文本框的内容
        #p_int    是光标的位置
        #我要验证20--80的数据
        num=int(p_str)
        if num<20 :  #如果是小于20就返回 暂不作判定是否通过验证
            return (QValidator.Intermediate, p_str, p_int)
        elif 20<=num <=80 :
            return (QValidator.Acceptable, p_str, p_int)  #验证通过
        else:
            return (QValidator.Invalid, p_str, p_int)  # 验证不通过
        pass

    def fixup(self, p_str):#修复函数
        num=int(p_str)
        if num>80 :
            return '80'
        if num<20:
            return '20'
        pass

    #看 https://www.cnblogs.com/liming19680104/p/10356797.html



class Demo(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(300,300)
        btn=QPushButton('按钮',self)
        btn.clicked.connect(self.A)
        btn.move(50,100)
        asb=Myasb(self,'50')  #实例化一个自定义的步长调节器
        self.asb = asb
        asb.move(50,50)
        asb.resize(100,30)
        asb.setAccelerated(True)  #设置长按时是否加速
        #isAccelerated() -> bool   返回是否加速
        asb.setReadOnly(True)  #设置只读--用户只能通过调节按钮改变数字,不能在编辑框中输入数值
        #isReadOnly() -> bool   返回是否只读

        #除了父类信号外,还有以下一个信号
        asb.editingFinished.connect(lambda :print('结束编辑'))  #结束编辑时调用

    def A(self):
        #print(self.asb.text())   #返回文本编辑框中显示的文本
        print(self.asb.lineEdit().text())  # 返回文本编辑框中显示的文本
        #self.asb.lineEdit().setText('88')  #设置文本编辑框中的文本
        #self.asb.setAlignment(Qt.AlignHCenter)  #设置对齐方式
        #参数看  https://www.cnblogs.com/liming19680104/p/10353781.html

        #self.asb.setFrame(False)  #设置是否有周边框架--默认是True
        #hasFrame() -> bool   返回是否有边框

        #self.asb.clear()  #清空内容

        #单行文本编辑器的方法都可以使用


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

 

 

 

QSpinBox

样式:      

主要处理整数和离散值集

 

import sys
from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QSpinBox

class SB(QSpinBox):  #子类化,重写textFromValue方法--自定义展示格式
    def textFromValue(self, p_int):  #每次改变数值,都会调用此函数
        #p_int 是编辑框中显示的值
        print('suzi',p_int)
        return str(p_int)+'*'+ str(p_int)  #返回给编辑框的文本
        pass

class Demo(QWidget):
    def __init__(self):
        super().__init__()
        self.resize(300,300)
        btn=QPushButton('按钮',self)
        btn.clicked.connect(self.A)
        btn.move(50,100)
        sb=SB(self)  #实例化一个对象
        self.sb=sb
        sb.move(50,50)
        sb.resize(100,30)
        #sb.valueChanged.connect(self.B)   #值改变时发出信号
        #会向槽函数传递一个整数值---文本框中改变后的值
        sb.valueChanged[str].connect(self.B)  # 值改变时发出信号
        # 会向槽函数传递一个字符串---文本框中改变后的文本

        #设置数值范围--默认调整0到99范围之间的整数
        sb.setMaximum(50)  #设置最大值
        #maximum() -> int    返回最大值
        sb.setMinimum(10)  #设置最小值
        #minimum() -> int   返回最小值
        sb.setRange(5, 40)  #设置数值区间

        sb.setWrapping(True)  #设置是否数值循环
        #wrapping() -> bool   返回是否数值循环

        sb.setSingleStep(1)  #设置步长
        #singleStep() -> int   返回步长

        sb.setPrefix("")  #设置前缀
        #prefix() -> str   返回前缀
        sb.setSuffix("")  #设置后缀
        #suffix() -> str   返回后缀

        sb.setSpecialValueText('最小值')  #当数据到达最小值时, 会显示此字符串
        sb.setDisplayIntegerBase(16)  #设置数据的进制---默认10进制
        #displayIntegerBase() -> int   返回进制


    def B(self,i):
        print('值改变了',i)
        pass
    def A(self):
        self.sb.setValue(25)  # 设置值
        s = self.sb.value()  # 返回值--十进制-不包括前缀后缀

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

 

s=self.sb.cleanText() #获取编辑框的内容--文本格式

 

 

 

 

QDoubleSpinBox-浮点


import sys
from PyQt5.QtWidgets import QApplication, QWidget,QPushButton,QDoubleSpinBox

class SB(QDoubleSpinBox): #子类化,重写textFromValue方法--自定义展示格式
def textFromValue(self, p_int): #每次改变数值,都会调用此函数
#p_int 是编辑框中显示的值
return str(p_int)+'*'+ str(p_int) #返回给编辑框的文本
pass

class Demo(QWidget):
def __init__(self):
super().__init__()
self.resize(300,300)
btn=QPushButton('按钮',self)
btn.clicked.connect(self.A)
btn.move(50,100)
sb=SB(self) #实例化一个对象
self.sb=sb
sb.move(50,50)
sb.resize(150,30)

sb.setDecimals(2) #设置小数位数
#decimals() -> int 返回小数位数

#sb.valueChanged.connect(self.B) #值改变时发出信号
#会向槽函数传递一个浮点数---文本框中改变后的值
sb.valueChanged[str].connect(self.B) # 值改变时发出信号
# 会向槽函数传递一个字符串---文本框中改变后的文本

#设置数值范围--默认调整0.00到99.99范围之间的整数
sb.setMaximum(50) #设置最大值
#maximum() -> int 返回最大值
sb.setMinimum(10.55) #设置最小值
#minimum() -> int 返回最小值
sb.setRange(5.55, 40.55) #设置数值区间

sb.setWrapping(True) #设置是否数值循环
#wrapping() -> bool 返回是否数值循环

sb.setSingleStep(1.01) #设置步长
#singleStep() -> int 返回步长

sb.setPrefix("周") #设置前缀
#prefix() -> str 返回前缀
sb.setSuffix("月") #设置后缀
#suffix() -> str 返回后缀

sb.setSpecialValueText('最小值') #当数据到达最小值时, 会显示此字符串

def B(self,i):
print('值改变了',i)
pass
def A(self):
self.sb.setValue(20.55) # 设置值
s = self.sb.value() # 返回值--十进制-不包括前缀后缀
s=self.sb.cleanText() #获取编辑框的内容--文本格式
print('文本格式获取',s)

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

 

 

 

 

 

 

 

 

 

 

 

 

 天子骄龙

posted @ 2019-02-10 10:13  天子骄龙  阅读(617)  评论(0编辑  收藏  举报