输入验证以及如何改进它

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入验证以及如何改进它相关的知识,希望对你有一定的参考价值。

我已经组合了一个输入验证函数(目前没有使用try / except块)。

它工作但纠错带来奇怪的行为......即一旦用户纠正了错误,他们必须按两次计算按钮才能正确触发?

def validation(self):

    partval = self.partDiaText.text()
    partlentext = self.partLenText.text()
    matdia = self.matDiaText.text()

    if partval.isalpha():
        self.error_label.setText("The part diameter must be a number!")
        self.partDiaText.setText("")

    elif partval == 0:
        self.error_label.setText("The part diameter must be greater than zero!")

    elif partlentext.isalpha():
        self.partLenText.setText("")
        self.error_label.setText("The part length must be a number!")

    elif partlentext == 0:
        self.error_label.setText("The part length must be greater than zero!")

    elif matdia.isalpha():
        self.matDiaText.setText("")
        self.error_label.setText("The material diameter must be a number!")

    elif matdia == 0:
        self.error_label.setText("The material diameter must be greater than zero!")


    else:
        self.error_label.clear()
        self.pushButton_2.clicked.connect(self.reset_output)
        self.pushButton_2.clicked.connect(self.calc_machining)
        self.pushButton_2.clicked.connect(self.calc_times)
        self.pushButton_2.clicked.connect(self.calc_qtyVar)
        self.pushButton_2.clicked.connect(self.work_centre)
        self.pushButton_2.clicked.connect(self.material_code)

编辑:即使没有错误,我仍然需要按两次pushbutton_2才能触发clicked.connects。如果我将所有clicked.connects从验证函数中取出并将它们放入主init函数中,它会正确触发,但输入上没有任何变量。

答案

我的猜测是,正如@noidsirius暗示的那样,第一次使用clic时,会执行验证并连接clic-to-slots。第二次确实执行了插槽。

如果这个猜测是正确的,解决方案可能是:


def __init__(self):
    self.pushButton_2.clicked.connect(self.validate_and_run_if_ok)
    # etc.

def validate_and_run_if_ok(self):

    partval = self.partDiaText.text()
    partlentext = self.partLenText.text()
    matdia = self.matDiaText.text()

    if partval.isalpha():
        self.error_label.setText("The part diameter must be a number!")
        self.partDiaText.setText("")

    elif partval == 0:
        self.error_label.setText("The part diameter must be greater than zero!")

    elif partlentext.isalpha():
        self.partLenText.setText("")
        self.error_label.setText("The part length must be a number!")

    elif partlentext == 0:
        self.error_label.setText("The part length must be greater than zero!")

    elif matdia.isalpha():
        self.matDiaText.setText("")
        self.error_label.setText("The material diameter must be a number!")

    elif matdia == 0:
        self.error_label.setText("The material diameter must be greater than zero!")


    else:
        self.error_label.clear()
        self.reset_output()
        self.calc_machining()
        self.calc_times()
        self.calc_qtyVar()
        self.work_centre()
        self.material_code()

(唯一的修改是else块,以及init的附加行)

以上是关于输入验证以及如何改进它的主要内容,如果未能解决你的问题,请参考以下文章

如何根据选定的无线电验证文本输入以及是不是可见

在哪里以及如何使用片段填充我的标签

这个功能(季节)运行时间太长,为啥?以及如何改进代码?

如何阅读/改进 PHP 计算的 C.R.A.P 指数

如何验证日期选择器以禁止/拒绝某些日期?

有没有办法改进这个查询