如何在python3中立即更新函数中的全局变量?

2024-10-02 16:22:41 发布

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

我有两个全局变量(StringVar()),它们需要在函数内部立即更新,而不是在最后更新。这是我的密码。你知道吗

def send_command_onLED():

    global ReactionTime_HHHH
    global ReactionTime_T
    global string_time
    global mode
    global mode_sel
    global command
    global text_mode_sel
    global go_text

    if mode==0:
        if command=='GUI':
            text_mode_sel.set("") # bisogna fare in modo di far eseguire subito questi due comandi
            go_text.set("GO!!!")  #
        elif command=='CMDL':
            print("Ready, steady, go!!!")
        ReactionTime_T = ''
        ReactionTime_HHHH = ''
        numcasuale = random.randint(10,20)
        time.sleep(numcasuale)
        ser.write("L1".encode())
        t0 = time.time()
        while(ReactionTime_T!='T'):
            ReactionTime_T=ser.read(1).decode('utf-8')
            t1 = time.time()
            if t1-t0>70:
                print("Error TIMEOUT!")
                exit()
        else:            
            ReactionTime_HHHH=ser.read(4).decode('utf-8')
            ser.reset_input_buffer()
        if command=='GUI':
            if ReactionTime_HHHH=="FFFF":
                string_time.set("You are drunk my friend!!!!")
            else:
                string_time.set(str(int(ReactionTime_HHHH, 16)) + " ms")
            updateScore()
            go_text.set("")
        elif command=='CMDL':
            if ReactionTime_HHHH=="FFFF":
                print("\nYou are drunk my friend!!!!\n")
            else:
                print("\nNew score: " + str(int(ReactionTime_HHHH, 16)) + " ms\n")
        mode=1
        mode_sel=1

    else:
        mode_sel=0
        if command=='CMDL':
            print("Unable to execute this command, the LED is already ON! ")

变量text_mode_selgo_text必须在time.sleep()之前更新,因为它们是两个标签的textvariable(我使用了tkinter),它们的更改应该在函数结束之前立即在函数外部看到。换句话说,它们的变化应该立即显示出来。在我的代码中,它们只有在函数结束时才被更新,time.sleep()之前的更改没有预期的效果。有没有办法在函数执行期间更新这些变量??你知道吗


Tags: 函数textgoiftimemodeglobalelse
2条回答

在这种情况下,不需要将text_mode_selgo_text标记为全局。你知道吗

从外观上看,在这种情况下,只有modemode_sel需要是全局的。其余部分没有在此函数中声明/分配,因此它们在没有全局变量的情况下将按预期工作。你知道吗

至于不立即更新,在不知道go_texttext_mode_sel是什么的情况下,很难说代码发生了什么,但是这段代码中没有延迟。我希望您正在使用的库可能需要一个重画命令。你知道吗

我假设您正在使用tkinter

如果是,您应该调用root.update()(或者调用您的tkinter.Tk实例的任何东西),如名称所示,立即更新屏幕。从__doc__

Enter event loop until all pending events have been processed by Tcl.

要延迟执行,您可能还需要查看root.after(time_in_ms, function)(同样,您的tkinter.Tk可能有不同的名称。你知道吗

相关问题 更多 >