首页 > 解决方案 > 为什么 tkinter after() 函数不起作用?

问题描述

我正在构建一个小型计算器应用程序。我已经决定暂时,我希望计算器在清除输入字段(显示数字的位置)之前显示“语法错误”(如果有的话)1.5 秒。问题是当我声明时程序不会清除条目input_field.after(1500, clear)。这是我的clear()方法(在其他任何地方都可以使用)。它还更新了一个布尔值,但它是无关紧要的,所以为了这个问题它基本上做了一件事。

def clear():
    input_field.delete(0, END)

如果我的功能有效,为什么“语法错误”文本在 1.5 秒后没有被清除?

编辑:这是我的 equals() 方法:

def equals():
    syntax_error = False
    input_field['state'] = 'normal'
    global ans, last_key_equals
    expression = input_field.get().replace("x", "*").replace("ans", str(ans))
    if len(expression) == 0:
        return
    try:
        result = simple_eval(expression)
    except SyntaxError:
        syntax_error = True
        result = "0"
        clear()
        input_field.insert(0, "Syntax Error")
        input_field.after(1500, clear)

    if not syntax_error:
        clear()
        input_field.insert(0, result)
        ans = int(result)
    last_key_equals = True
    input_field['state'] = 'readonly'

标签: pythontkinter

解决方案


您需要启用对输入字段的写入。将您的 clear 功能更改为:

def clear():
    prev_state = input_field['state']
    input_field['state'] = 'normal'
    input_field.delete(0, END)
    input_field['state'] = prev_state

推荐阅读