如何在Python中创建启动和停止控件?

问题描述 投票:0回答:1

我正在尝试在 Python 中创建一个循环控件,可以随时启动和停止循环。

我有一个 start() 函数,从那时起脚本开始在 python 终端中运行,但是我希望当我写 stop 时,它会停止循环,但不会结束整个程序。

示例:

loop = True

def start():
    for i in loop:
        print('loop..')
        print('loop..')
        # is constantly displaying things in the terminal and executing commands..
        
        if condition:
            loop = False
            # stops the loop, but can be started again at any time

print('stopped')

这将类似于下面的代码,它不能正常工作,因为它会无限运行,即使我写 controll('stop')

import time

def controll(status):
    global loop_started 

    if status == 'start':
        print("starting loop...")
        loop_started = True
        starting_loop()

    elif status == 'stop':
        print("stoping loop...")
        loop_started = False

    else:
        print("invalid")

def starting_loop():
    while loop_started:
        print("loop started...")
        time.sleep(1)


loop_started = False


controll('start')  # start the loop
time.sleep(5) 
controll('stop')  # stop the loop

如何以函数式方式创建此控件?

python controller
1个回答
0
投票

要以功能方式创建用于启动和停止循环的控件,您可以将循环功能封装在函数中,并利用标志来确定循环是否应继续运行。具体方法如下:

import time

def loop_function():
    while True:
        print("loop running...")
        time.sleep(1)

def control_loop():
    loop_running = True

    def start():
        nonlocal loop_running
        if not loop_running:
            print("Starting loop...")
            loop_running = True
            loop_function()

    def stop():
        nonlocal loop_running
        if loop_running:
            print("Stopping loop...")
            loop_running = False

    return start, stop

# Create control functions
start_loop, stop_loop = control_loop()

# Start the loop
start_loop()

# Wait for a while
time.sleep(5) 

# Stop the loop
stop_loop()

在此实施中:

  • loop_function()
    包含您要执行的功能 循环。
  • control_loop()
    创建并返回两个函数,
    start()
    stop()
    ,分别可用于启动和停止循环。
  • start()
    stop()
    函数使用
    nonlocal
    关键字来修改
    loop_running
    外部作用域中的
    control_loop()
    变量。
  • 然后您可以调用
    start()
    来启动循环,并调用
    stop()
    来停止循环。
© www.soinside.com 2019 - 2024. All rights reserved.