QAbstractSpinBox(基类)

编程入门 行业动态 更新时间:2024-10-11 11:16:05

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("结束编辑"))

更多推荐

QAbstractSpinBox(基类)

本文发布于:2023-06-13 17:21:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1386269.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:QAbstractSpinBox   基类

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!