繁体   English   中英

如何使 Pyqt5 LineEdit 只接受数字

[英]How to make that Pyqt5 LineEdit accepts only numbers

目前,我正在使用 python 和 PYQT5 开发一个程序,其中用户输入只能是数字。 问题是我不知道该怎么做。 例如当我得到这个变量时

VAR_1=float(self.ui.lineEdit.text())

我需要输入的文本只是一个数字。 我的意思是当用户试图写一个字母 o 符号时什么也没有发生。

使用/尝试setValidatorsetInputMask方法

import sys

from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

class ButtonName(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Example - Validator")
        self.setGeometry(800, 200, 200, 200)
        self.UI()
        self.layouts()
        self.show()

    def UI(self):
        self.lbl_integer = QLabel("Integer Validator")
        self.textbox_integervalidator = QLineEdit()
        self.textbox_integervalidator.setPlaceholderText("upto 3 digit value only accept")
        self.textbox_integervalidator.setValidator(QIntValidator(1, 999, self))

        self.lbl_double = QLabel("Double Validator")
        self.textbox_doublevalidator = QLineEdit()
        self.textbox_doublevalidator.setValidator(QDoubleValidator(0.99, 99.99, 2))

        self.lbl_regexp = QLabel("RexExp Validator")
        self.textbox_regexpvalidator = QLineEdit()
        reg_ex_1 = QRegExp("[0-9]+.?[0-9]{,2}") # double
        # reg_ex_2 = QRegExp("[0-9]{1,5}")  # minimum 1 integer number to maxiumu 5 integer number
        # reg_ex_3 = QRegExp("-?\\d{1,3}")  # accept negative number also
        # reg_ex_4 = QRegExp("")
        self.textbox_regexpvalidator.setValidator(QRegExpValidator(reg_ex_1))

    def layouts(self):
        mainlayout = QVBoxLayout()
        mainlayout.addWidget(self.lbl_integer)
        mainlayout.addWidget(self.textbox_integervalidator)
        mainlayout.addWidget(self.lbl_double)
        mainlayout.addWidget(self.textbox_doublevalidator)
        mainlayout.addWidget(self.lbl_regexp)
        mainlayout.addWidget(self.textbox_regexpvalidator)
        self.setLayout(mainlayout)

def main():
    app = QApplication(sys.argv)
    mainwindow = ButtonName()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

尝试为您的行编辑制作一个蒙版:

self.lineEdit.setInputMask("00")

当您在 Mask 中输入“0”时,代码会理解它只能是数字。 放置的零数量将是 lineedit 将接受的房屋数量。 在这种情况下如何和“00”行编辑接受两个房子(十的房子)

你可以这样试试

self.ui.lineEdit.textChanged.connect(self.accept_only_numbers)

def accept_only_numbers(self): 
    VAR_1=float(self.ui.lineEdit.text()) 
    if  VAR_1.isnumeric() == True:
        print("ok is number") 
    else:
        VAR_1.clear()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM