当我的提交按钮在我的while循环中不起作用时,我如何走出这个while循环

2024-04-19 21:45:14 发布

您现在位置:Python中文网/ 问答频道 /正文

@app.route("/MODBUS", methods=["GET","POST"])
def mod():
     if request.method == "POST":
          setup.slave_id= request.form.get("slave_id",type=int)
          setup.port = request.form.get("port",type=str)
          setup.baudrate= request.form.get("baud_rate",type=int)
          setup.num_registers= request.form.get("registers",type=int)
          setup.timeout= request.form.get("timeout",type=int)
          
          
          print(setup.slave_id)
          print(setup.port)
          print(setup.baudrate)
          print(setup.num_registers)
          print(setup.timeout)
          setup.setup_modbus()
          
          state= request.form.get("start_button")
          state1= request.form.get("stop_button")
          
          
          while(str(state) == "START"):
               print(state)
               openapplib.open_app_modbus()
               startapplib.start_app_modbus()
               if(str(state1) == "STOP"):
                    break
                    print(state1)
                    closeapplib.close_app_modbus()
 
return render_template("modbus.html") 

我正在运行这个flask服务器,在这里我使用html表单提交并更新不同python设置文件中的值。在HTML文件中,我使用“开始”和“停止”作为输入来调用上述函数。但是,当我在内部时,当我单击开始和停止时,它不会调用if(str(state1)=“stop”):条件中的停止函数

这是我的HTML文件

<h1>MODBUS SETTINGS</h1>

<form name="form1" id="form1" method="POST">
SLAVE_ID: <select name="slave_id" id="slave_id">
    <option value="" selected="selected">Select Slave-ID</option>
  </select>
  <br><br>
PORT: <select name="port" id="port">
    <option value="" selected="selected">Select No of Port</option>
  </select>
  <br><br>
REGISTERS: <select name="registers" id="registers">
    <option value="" selected="selected">Select No of Registers</option>
  </select>
  <br><br>
BAUD_RATE: <select name="baud_rate" id="baud_rate">
    <option value="" selected="selected">Select Baud-Rate</option>
  </select>
  <br><br>
TIMEOUT: <select name="timeout" id="timeout">
    <option value="" selected="selected">Select Timeout</option>
  </select>
  <br><br>
  <input type="submit" value="SETUP"/>  
  <br><br>
  <input type="submit" name="start_button" value="START">
  <br><br>
  <input type="submit" name="stop_button" value="STOP">
  <br><br>
  <input type="button" value="BACK" onclick="history.back()">
  <br><br>
</form>

1条回答
网友
1楼 · 发布于 2024-04-19 21:45:14

当表单上有多个提交按钮时,我相信只有单击的按钮才会发送到服务器。[https://www.coderslexicon.com/using-multiple-submit-buttons-with-a-single-form/

从代码中,当您单击start时,只发送该按钮,while循环启动。当您单击stop时,只发送该值。start永远不会发送,这意味着您的条件while(str(state) == "START"):永远不会触发,因此stop将无法工作

不要使用while循环,而是在前端使用线程和一些javascript代码

  1. 单击“开始”按钮之前,“停止”处于隐藏或禁用状态

  2. 单击“开始”按钮时,将启动一个单独的线程来处理处理服务器端并将控件返回到窗体。然后,当“开始”按钮隐藏或禁用时,“停止”按钮将启用或可见

  3. 当用户单击停止按钮时,您将停止线程或函数服务器端,并且开始按钮将再次启用

相关问题 更多 >