zoukankan      html  css  js  c++  java
  • 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_())

     

     天子骄龙

  • 相关阅读:
    Java实现点击导出excel页面遮罩屏蔽,下载完成后解除遮罩
    文档API生成神器SandCastle使用心得
    Stimulsoft报表操作笔记(一):统计
    在线office文档编辑NTKO使用心得
    oracle与sqlserver利用函数生成年月日加流水号
    解决同一页面中两个iframe互相调用jquery,js函数
    jquery配合.NET实现点击指定绑定数据并且能够一键下载
    页面的div中有滚动条,js实现刷新页面后回到记录时滚动条的位置
    关于datagrid中控件利用js调用后台方法事件的问题
    关于datagrid中数据条件颜色问题
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10358708.html
Copyright © 2011-2022 走看看