2017-08-07 325 views
-1

我对Python和PyQt5比较陌生,所以很抱歉如果这个问题很简单。我想创建一个关键的消息,说明一个特定的QlineEdit是空的,所以程序不运行。我能够将消息绑定到相应的输入,但是,当我单击取消按钮或“X”时,消息不断弹出。我想在点击后关闭它,我做错了什么? PS:我正在使用PyQt5。QMessageBox不关闭

def startTest(self): 
    if len(self.Radius_in.text()) == 0: 
     QMessageBox.critical(self, "Error", "Please enter the radius", QMessageBox.Cancel) 
     pass 
    elif len(self.Distance_in.text()) == 0: 
     QMessageBox.critical(self, "Error", "Please enter the distance",QMessageBox.Cancel) 
     pass 
    elif len(self.Speed_in.text()) == 0: 
     QMessageBox.critical(self, "Error", "Please enter the linear speed",QMessageBox.Cancel) 
     pass 
    elif len(self.Nload_in.text()) == 0: 
     QMessageBox.critical(self, "Error", "Please enter the normal load",QMessageBox.Cancel) 
     pass 
    elif len(self.Acq_int_in.text()) == 0: 
     QMessageBox.critical(self, "Error", "Please enter the acquisition rate",QMessageBox.Cancel) 
     pass 
    elif len(self.file_name.text()) == 0: 
     QMessageBox.critical(self, "Error", "Please enter the name of the file",QMessageBox.Cancel) 
     pass  
    else: 
     #open and save a file 
     fileName = self.file_name.text() 
     savedFile = open(fileName + ".txt","w") 

     runTime = round(float(str(self.Distance_in.text()))/(60.*float(str(self.Speed_in.text()))),2) 
     NoLaps = round(float(str(self.Distance_in.text()))/(pi*2.*float(str(self.Radius_in.text()))),2) 
     discRot = round(float(str(self.Speed_in.text()))*60./(2.*pi*float(str(self.Radius_in.text()))),2) 
     discFreq = round(float(str(self.Speed_in.text()))/(2.*pi*float(str(self.Radius_in.text()))),2)     
     try: 
      self.duration_out.setText(str(runTime)) 
      self.laps_out.setText(str(NoLaps)) 
      self.rotation_out.setText(str(discRot)) 
      self.Freq_out.setText(str(discFreq)) 
     except: 
      self.duration_out.setText('error') 
      self.laps_out.setText('error') 
      self.rotation_out.setText('error') 
      self.Freq_out.setText('error')   
+0

究竟你“我能够将消息绑定到相应的输入”是什么意思?如何调用startTest? – ekhumoro

+1

您可能想要重新考虑使用所有这些消息框,因为这会导致非常糟糕的用户体验。一个更好的方法是最初禁用执行计算的按钮,并且只有在所有必需字段都有有效值时才启用它。用户通过旋转框输入数值也会更好(这样可以避免必须进行所有那些难看的字符串转换)。 – ekhumoro

+0

ekhumoro StartTest被称为一个按钮被按下,“是”我写了一些行来阻止按钮,如果所有的输入都没有输入,它的工作原理。但是,如果用户删除其中一个输入,则该按钮不会再次被禁用,这就是我创建QMessageBox的原因。我为它写的代码如下:'self.start_btn.setEnabled(False) def enablebtn(self): if len(self.Radius_in.text())== 0: pass else: self。 start_btn.setEnabled(True)' – Luca

回答

0
# Enable and disable the start button  
    self.start_btn.setEnabled(False) 
def enablebtn(self): 
    if (len(self.Radius_in.text()) != 0) and (len(self.Distance_in.text()) != 0) and (len(self.Speed_in.text()) != 0)\ 
     and (len(self.Nload_in.text()) != 0) and (len(self.Acq_int_in.text()) != 0) and (len(self.file_name.text()) != 0): 
      self.start_btn.setEnabled(True) 
    else: 
     self.start_btn.setEnabled(False)