我已经组合了一个用于输入验证的函数(当前未使用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函数中,则它将正确触发,但输入上没有任何验证。
答案 0 :(得分:1)
我的猜测是,正如@noidsirius所暗示的那样,您第一次使用clic时,将执行验证并将clic连接到插槽。插槽确实是第二次执行。
如果此猜测正确,则可能的解决方案是:
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 中添加了一行)