zoukankan      html  css  js  c++  java
  • PyQt5 控件学习(一个一个学习之QAbstractSpinBox)

    QAbstractSpinBox 继承图:

    QAbstractSpinBox描述:

    步长调节器的样例:

    它既可以用鼠标来操作,又可用键盘来操作 !

    它有整形的 QSpinBox ,浮点型 QDoubleSpinBox的还有时间型 QDataTimeEdit  主要这几种!

    QAbstractSpinBox 继承:

    它继承与 QWidget  

    QAbstractSpinBox 功能作用:

    与其他抽象类不同的是,它这个类还是可以直接实例化使用的!(它内部没有什么抽象方法)

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QAbstractSpinBox 的学习")
            self.resize(400,400)
            self.set_ui()
    
    
        def set_ui(self):
            abstractSpinBox = QAbstractSpinBox(self)
            abstractSpinBox.resize(100,30)
            abstractSpinBox.move(100,100)
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    可以直接实例化使用的

    QAbstractSpinBox 功能作用之使用:

    使用的时候还是尽量子类化它!

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class MyAbstractSpinBox(QAbstractSpinBox):
        def __init__(self,parent=None,num = '0',*args,**kwargs):  #此处是定义
            super().__init__(parent,*args,**kwargs)  #此处是调用  ,注意区别
            self.lineEdit().setText(num)
    
        def stepEnabled(self):
            current_num = int(self.text())
            if current_num == 0:
                return QAbstractSpinBox.StepUpEnabled
    
            elif current_num == 9:
                return QAbstractSpinBox.StepDownEnabled
    
            elif current_num <0 or current_num >9:
                return QAbstractSpinBox.StepNone
    
            else:
                return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        def stepBy(self, p_int):  # 如果上面的方法返回的是有效的话,就会调用这个函数
    
            current_num = int(self.text())+p_int
            ############################关键是如何设置回去###############################
            self.lineEdit().setText(str(current_num))  # 它是个组合控件,左面是个单行输入框,
    
            ############################关键是如何设置回去###############################
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QAbstractSpinBox 的学习")
            self.resize(400,400)
            self.set_ui()
        def set_ui(self):
            abstractSpinBox = MyAbstractSpinBox(self,'5')
            abstractSpinBox.resize(100,30)
            abstractSpinBox.move(100,100)
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    QAbstractSpinBox 功能作用之长按调整步长加快频率:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class MyAbstractSpinBox(QAbstractSpinBox):
        def __init__(self,parent=None,num = '0',*args,**kwargs):  #此处是定义
            super().__init__(parent,*args,**kwargs)  #此处是调用  ,注意区别
            self.lineEdit().setText(num)
    
        def stepEnabled(self):
            # current_num = int(self.text())
            # if current_num == 0:
            #     return QAbstractSpinBox.StepUpEnabled
            #
            # elif current_num == 9:
            #     return QAbstractSpinBox.StepDownEnabled
            #
            # elif current_num <0 or current_num >9:
            #     return QAbstractSpinBox.StepNone
            # else:
            return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        def stepBy(self, p_int):  # 如果上面的方法返回的是有效的话,就会调用这个函数
    
            current_num = int(self.text())+p_int
            self.lineEdit().setText(str(current_num))  # 它是个组合控件,左面是个单行输入框,
            #设置加速
            self.setAccelerated(True)
            print(self.isAccelerated())
    
    
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QAbstractSpinBox 的学习")
            self.resize(400,400)
            self.set_ui()
        def set_ui(self):
            abstractSpinBox = MyAbstractSpinBox(self,'5')
            abstractSpinBox.resize(100,30)
            abstractSpinBox.move(100,100)
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    QAbstractSpinBox 功能作用之只读:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class MyAbstractSpinBox(QAbstractSpinBox):
        def __init__(self,parent=None,num = '0',*args,**kwargs):  #此处是定义
            super().__init__(parent,*args,**kwargs)  #此处是调用  ,注意区别
            self.lineEdit().setText(num)
    
        def stepEnabled(self):
            # current_num = int(self.text())
            # if current_num == 0:
            #     return QAbstractSpinBox.StepUpEnabled
            #
            # elif current_num == 9:
            #     return QAbstractSpinBox.StepDownEnabled
            #
            # elif current_num <0 or current_num >9:
            #     return QAbstractSpinBox.StepNone
            # else:
            return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        def stepBy(self, p_int):  # 如果上面的方法返回的是有效的话,就会调用这个函数
    
            current_num = int(self.text())+p_int
            self.lineEdit().setText(str(current_num))  # 它是个组合控件,左面是个单行输入框,
            #设置加速
            self.setAccelerated(True)
            print(self.isAccelerated())
    
    
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QAbstractSpinBox 的学习")
            self.resize(400,400)
            self.set_ui()
        def set_ui(self):
            abstractSpinBox = MyAbstractSpinBox(self,'5')
            abstractSpinBox.resize(100,30)
            abstractSpinBox.move(100,100)
    
            print(abstractSpinBox.isReadOnly())   #查看只读  
            abstractSpinBox.setReadOnly(True)    #设置只读
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    QAbstractSpinBox 功能作用之设置以及获取内容:

    上面已经有提到过了,注意点就是设置的时候要通过QLineEdit 来设置,

    它为什么没有直接提供设置方法呢?因为它这个控件主要的用途是获取值。

    其实这个控件的左边就是QLineEdit ,QLineEdit 里面的大部分功能,都可以用

    QAbstractSpinBox 功能作用之对齐方式:

    之前,我们通过拿到左面的单行文本编辑器也可以设置对齐方式,

    这里,也可以用它直接提供的方法设置对齐方式

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class MyAbstractSpinBox(QAbstractSpinBox):
        def __init__(self,parent=None,num = '0',*args,**kwargs):  #此处是定义
            super().__init__(parent,*args,**kwargs)  #此处是调用  ,注意区别
            self.lineEdit().setText(num)
    
        def stepEnabled(self):
            # current_num = int(self.text())
            # if current_num == 0:
            #     return QAbstractSpinBox.StepUpEnabled
            #
            # elif current_num == 9:
            #     return QAbstractSpinBox.StepDownEnabled
            #
            # elif current_num <0 or current_num >9:
            #     return QAbstractSpinBox.StepNone
            # else:
            return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        def stepBy(self, p_int):  # 如果上面的方法返回的是有效的话,就会调用这个函数
    
            current_num = int(self.text())+p_int
            self.lineEdit().setText(str(current_num))  # 它是个组合控件,左面是个单行输入框,
            #设置加速
            self.setAccelerated(True)
            print(self.isAccelerated())
    
    
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QAbstractSpinBox 的学习")
            self.resize(400,400)
            self.set_ui()
        def set_ui(self):
            abstractSpinBox = MyAbstractSpinBox(self,'5')
            abstractSpinBox.resize(100,30)
            abstractSpinBox.move(100,100)
    
            print(abstractSpinBox.isReadOnly())   #查看只读
            abstractSpinBox.setReadOnly(True)    #设置只读
    
        ###########################设置对齐###############################
            abstractSpinBox.setAlignment(Qt.AlignCenter)  
    
        
        
        ############################设置对齐###############################
    
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    QAbstractSpinBox 功能作用之设置周边框架:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class MyAbstractSpinBox(QAbstractSpinBox):
        def __init__(self,parent=None,num = '0',*args,**kwargs):  #此处是定义
            super().__init__(parent,*args,**kwargs)  #此处是调用  ,注意区别
            self.lineEdit().setText(num)
    
        def stepEnabled(self):
            # current_num = int(self.text())
            # if current_num == 0:
            #     return QAbstractSpinBox.StepUpEnabled
            #
            # elif current_num == 9:
            #     return QAbstractSpinBox.StepDownEnabled
            #
            # elif current_num <0 or current_num >9:
            #     return QAbstractSpinBox.StepNone
            # else:
            return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        def stepBy(self, p_int):  # 如果上面的方法返回的是有效的话,就会调用这个函数
    
            current_num = int(self.text())+p_int
            self.lineEdit().setText(str(current_num))  # 它是个组合控件,左面是个单行输入框,
            #设置加速
            self.setAccelerated(True)
            print(self.isAccelerated())
    
    
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QAbstractSpinBox 的学习")
            self.resize(400,400)
            self.set_ui()
        def set_ui(self):
            abstractSpinBox = MyAbstractSpinBox(self,'5')
            abstractSpinBox.resize(100,30)
            abstractSpinBox.move(100,100)
    
    
            print(abstractSpinBox.hasFrame())  #  默认就是True 的
            # abstractSpinBox.setFrame(False)
    
    
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    QAbstractSpinBox 功能作用之清空文本框内容:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class MyAbstractSpinBox(QAbstractSpinBox):
        def __init__(self,parent=None,num = '0',*args,**kwargs):  #此处是定义
            super().__init__(parent,*args,**kwargs)  #此处是调用  ,注意区别
            self.lineEdit().setText(num)
    
        def stepEnabled(self):
            # current_num = int(self.text())
            # if current_num == 0:
            #     return QAbstractSpinBox.StepUpEnabled
            #
            # elif current_num == 9:
            #     return QAbstractSpinBox.StepDownEnabled
            #
            # elif current_num <0 or current_num >9:
            #     return QAbstractSpinBox.StepNone
            # else:
            return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        def stepBy(self, p_int):  # 如果上面的方法返回的是有效的话,就会调用这个函数
    
            current_num = int(self.text())+p_int
            self.lineEdit().setText(str(current_num))  # 它是个组合控件,左面是个单行输入框,
            #设置加速
            self.setAccelerated(True)
            print(self.isAccelerated())
    
    
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QAbstractSpinBox 的学习")
            self.resize(400,400)
            self.set_ui()
        def set_ui(self):
            abstractSpinBox = MyAbstractSpinBox(self,'5')
            abstractSpinBox.resize(100,30)
            abstractSpinBox.move(100,100)
    
    
    ############################清空###############################
            abstractSpinBox.clear()
            #如果它提供的话,可以这样
            #1,直接设置空字符串
            #2,拿到左面的lineEdit 去清空
    
    ############################清空###############################
    
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    QAbstractSpinBox 功能作用之控制组合控件右面的样式:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class MyAbstractSpinBox(QAbstractSpinBox):
        def __init__(self,parent=None,num = '0',*args,**kwargs):  #此处是定义
            super().__init__(parent,*args,**kwargs)  #此处是调用  ,注意区别
            self.lineEdit().setText(num)
    
        def stepEnabled(self):
            # current_num = int(self.text())
            # if current_num == 0:
            #     return QAbstractSpinBox.StepUpEnabled
            #
            # elif current_num == 9:
            #     return QAbstractSpinBox.StepDownEnabled
            #
            # elif current_num <0 or current_num >9:
            #     return QAbstractSpinBox.StepNone
            # else:
            return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        def stepBy(self, p_int):  # 如果上面的方法返回的是有效的话,就会调用这个函数
    
            current_num = int(self.text())+p_int
            self.lineEdit().setText(str(current_num))  # 它是个组合控件,左面是个单行输入框,
            #设置加速
            self.setAccelerated(True)
            print(self.isAccelerated())
    
    
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QAbstractSpinBox 的学习")
            self.resize(400,400)
            self.set_ui()
        def set_ui(self):
            abstractSpinBox = MyAbstractSpinBox(self,'5')
            abstractSpinBox.resize(100,30)
            abstractSpinBox.move(100,100)
            ############################设置组合控件的  右面的按钮标识  ###############################
    
    
            abstractSpinBox.setButtonSymbols(QAbstractSpinBox.NoButtons)  #里面放的是枚举值
                        #此时就将右面的按钮给隐藏了,如果还想调节它,可以用键盘上的 上下键 
    
            ############################设置组合控件的  右面的按钮标识  ###############################
    
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    QAbstractSpinBox 功能作用之内容验证:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class MyAbstractSpinBox(QAbstractSpinBox):
        def __init__(self,parent=None,num = '0',*args,**kwargs):  #此处是定义
            super().__init__(parent,*args,**kwargs)  #此处是调用  ,注意区别
            self.lineEdit().setText(num)
    
        def stepEnabled(self):
            # current_num = int(self.text())
            # if current_num == 0:
            #     return QAbstractSpinBox.StepUpEnabled
            #
            # elif current_num == 9:
            #     return QAbstractSpinBox.StepDownEnabled
            #
            # elif current_num <0 or current_num >9:
            #     return QAbstractSpinBox.StepNone
            # else:
            return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        def stepBy(self, p_int):  # 如果上面的方法返回的是有效的话,就会调用这个函数
    
            current_num = int(self.text())+p_int
            self.lineEdit().setText(str(current_num))  # 它是个组合控件,左面是个单行输入框,
            #设置加速
            self.setAccelerated(True)
            print(self.isAccelerated())
    
    
    
    ############################验证器   ###############################
        def  validate(self, p_str, p_int):
            # 18-180
            num = int(p_str)
            if num<18:
                return (QValidator.Intermediate,p_str,p_int)
            elif num <= 180:
                return (QValidator.Acceptable,p_str,p_int)
            else:
                return (QValidator.Invalid,p_str,p_int)
    
        def fixup(self, p_str):  # 当 验证器中返回的状态是 无效或者是 中间状态时会再给它一次机会!
            print(p_str)
            return "18"
    
    ############################验证器   ###############################
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QAbstractSpinBox 的学习")
            self.resize(400,400)
            self.set_ui()
        def set_ui(self):
            abstractSpinBox = MyAbstractSpinBox(self,'5')
            abstractSpinBox.resize(100,30)
            abstractSpinBox.move(100,100)
            ############################设置组合控件的  右面的按钮标识  ###############################
    
    
            abstractSpinBox.setButtonSymbols(QAbstractSpinBox.NoButtons)  #里面放的是枚举值
                        #此时就将右面的按钮给隐藏了,如果还想调节它,可以用键盘上的 上下键
    
            ############################设置组合控件的  右面的按钮标识  ###############################
    
    
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    QAbstractSpinBox 信号:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    
    class MyAbstractSpinBox(QAbstractSpinBox):
        def __init__(self,parent=None,num = '0',*args,**kwargs):  #此处是定义
            super().__init__(parent,*args,**kwargs)  #此处是调用  ,注意区别
            self.lineEdit().setText(num)
    
        def stepEnabled(self):
            # current_num = int(self.text())
            # if current_num == 0:
            #     return QAbstractSpinBox.StepUpEnabled
            #
            # elif current_num == 9:
            #     return QAbstractSpinBox.StepDownEnabled
            #
            # elif current_num <0 or current_num >9:
            #     return QAbstractSpinBox.StepNone
            # else:
            return QAbstractSpinBox.StepUpEnabled | QAbstractSpinBox.StepDownEnabled
    
        def stepBy(self, p_int):  # 如果上面的方法返回的是有效的话,就会调用这个函数
    
            current_num = int(self.text())+p_int
            self.lineEdit().setText(str(current_num))  # 它是个组合控件,左面是个单行输入框,
            #设置加速
            self.setAccelerated(True)
            print(self.isAccelerated())
    
    
    
    ############################验证器   ###############################
        def  validate(self, p_str, p_int):
            # 18-180
            num = int(p_str)
            if num<18:
                return (QValidator.Intermediate,p_str,p_int)
            elif num <= 180:
                return (QValidator.Acceptable,p_str,p_int)
            else:
                return (QValidator.Invalid,p_str,p_int)
    
        def fixup(self, p_str):  # 当 验证器中返回的状态是 无效或者是 中间状态时会再给它一次机会!
            print(p_str)
            return "18"
    
    ############################验证器   ###############################
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            self.setWindowTitle("QAbstractSpinBox 的学习")
            self.resize(400,400)
            self.set_ui()
        def set_ui(self):
            abstractSpinBox = MyAbstractSpinBox(self,'5')
            abstractSpinBox.resize(100,30)
            abstractSpinBox.move(100,100)
    
            abstractSpinBox.editingFinished.connect(lambda :print("结束编辑"))
    
    
    if __name__ == '__main__':
        app =QApplication(sys.argv)
    
        window = Window()
        window.show()
    
        sys.exit(app.exec_())
    View Code

    总结: 

    这就是步长调节器的基类 QAbstractSpinBox  的内容:

    下面就看它具体的子类:先看 QSpinBox :https://www.cnblogs.com/zach0812/p/11387108.html

     

  • 相关阅读:
    2015年校园招聘之腾讯(数据挖掘)笔试面试题目
    VBoxGuestAdditions.iso下载地址
    软件測试自学指南---从入门到精通
    C语言指针的初始化和赋值
    使用Jquery+EasyUI 进行框架项目开发案例解说之二---用户管理源代码分享
    完美攻略心得之圣魔大战3(Castle Fantisia)艾伦希亚战记(艾伦西亚战记)包含重做版(即新艾伦希亚战记)
    DatabaseMetaData的用法(转)
    Thread-safety with regular expressions in Java
    大象,大象
    使用 Java 实现 Comet 风格的 Web 应用
  • 原文地址:https://www.cnblogs.com/zach0812/p/11386757.html
Copyright © 2011-2022 走看看