【问题标题】:How do i come out of this while loop as my submit button doesnt work in my while loop当我的提交按钮在我的 while 循环中不起作用时,我如何摆脱这个 while 循环
【发布时间】:2021-10-09 16:37:32
【问题描述】:
@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") 

我正在运行这个烧瓶服务器,我在其中使用 html 表单提交和更新不同 python 设置文件中的值。在 HTML 文件中,我使用“START”和“STOP”作为输入来调用上述函数。但是当我在当我点击开始时,当我点击停止时,它不会调用 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>

【问题讨论】:

  • 也许 statesatate1 应该设置在你的循环中?
  • 您是否试图跳出您第一次点击开始时进入的同一个循环?
  • 是的,这正是我需要做的

标签: python html python-3.x flask


【解决方案1】:

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

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

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

  1. 在单击开始按钮之前,Stop 被隐藏或禁用

  2. 当您单击开始按钮时,您会启动一个单独的线程来处理处理服务器端并将控制权返回给您的表单。当开始按钮被隐藏或禁用时,停止按钮将被启用或变为可见

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

【讨论】:

    猜你喜欢
    • 2022-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    • 2014-09-05
    • 2014-05-27
    • 2022-12-18
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多