QAbstractSpinBox(基类)

12 篇文章 0 订阅

1、QAbstractSpinBox只读设置,原来的文本编辑器的只读指无法应用鼠标键盘等操作,改变文本框中的内容。

此处指:只允许用户通过步长调节器调节,不能使用键盘输入。

        asb.setReadOnly(True)

2、设置获取内容:创建提示符,单行文本编辑器的所有功能,获取单行文本编辑器之后都可以使用。

from PyQt5.Qt import *

# 子类化控件类别
class MyASB(QAbstractSpinBox):
    # 定义值,不传值的情况下就指默认值
    def __init__(self, parent=None, num=0, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        self.lineEdit().setText(num)

    def stepEnabled(self):
        return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled

    def stepBy(self, p_int):
        #print(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("QAbstractSpinButton的学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        asb = MyASB(self, "6")
        self.asb = asb
        asb.resize(100, 30)
        asb.move(100, 100)
        # 设置加速
        # asb.setAccelerated(True)
        # asb.setReadOnly(True)
        test_btn = QPushButton(self)
        test_btn.move(200, 200)
        test_btn.setText("测试按钮")
        test_btn.clicked.connect(self.btn_test)

    def btn_test(self):
        print(self.asb.text())
        self.asb.lineEdit().setText("88")
        # 获取单行文本编辑器
        # 创建提示框
        cl = QCompleter(["sz", "123", "18"], self.asb)
        # 单行文本编辑器的很多操作都可以使用
        self.asb.lineEdit().setCompleter(cl)
        self.asb.lineEdit().setAlignment(Qt.AlignRight)
    

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.resize(500, 500)
    window.show()

    sys.exit(app.exec_())

3、对齐框架清空标识:

# 对齐
self.asb.setAlignment(Qt.AlignCenter)

清空文本框内容:self.asb.clear()

QAbstractSpinBox类中的buttonSymbols可以设置button的样式:

        # 设置右侧按钮格式,可以通过键盘上的上下键改变文本
        self.asb.setButtonSymbols(QAbstractSpinBox.NoButtons)

4、内容验证:直接在文本框内部编辑内容,是不会调用stepEnable和stepBy方法的。

方案一可以直接将文本呢框设为只读。

方案二保证用户输入的同时又可以验证文本。

输入内容之后会自动调用验证方法(QLineEdit中的案例),有效果就接收输入进来,没有结果就拒绝,还有一个修复方法可以修复。与之前的验证器大致相同。

# 输入为内容与当前光标所在位置。

未做容错处理,可以通过try except进行处理。

from PyQt5.Qt import *

# 子类化控件类别
class MyASB(QAbstractSpinBox):
    # 定义值,不传值的情况下就指默认值
    def __init__(self, parent=None, num=0, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        self.lineEdit().setText(num)

    def stepEnabled(self):
        return QAbstractSpinBox.StepDownEnabled | QAbstractSpinBox.StepUpEnabled

    def stepBy(self, p_int):
        #print(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("QAbstractSpinButton的学习")
        self.resize(500, 500)
        self.setup_ui()

    def setup_ui(self):
        asb = MyASB(self, "6")
        self.asb = asb
        asb.resize(100, 30)
        asb.move(100, 100)
        # 设置加速
        # asb.setAccelerated(True)
        # asb.setReadOnly(True)
        test_btn = QPushButton(self)
        test_btn.move(200, 200)
        test_btn.setText("测试按钮")
        test_btn.clicked.connect(self.btn_test)

    def btn_test(self):
        # 设置右侧按钮格式,可以通过键盘上的上下键改变文本
        self.asb.setButtonSymbols(QAbstractSpinBox.NoButtons)

    # 验证器
    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"

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.resize(500, 500)
    window.show()

    sys.exit(app.exec_())

5、信号:

self.asb.editingFinished.connect(lambda: print("结束编辑"))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值