如何添加仅在 tkinter 中使用某个命令后才可用的命令?

How to add commands only usable after using a certain command in tkinter?

我正在尝试用 tkinter 文本框制作某种命令框,这里是一个例子

import tkinter as tk

screen = tk.Tk()
screen.geometry('900x700')

texte = tk.Text(screen, height="5")

texte.place(x = 100, y = 0)
texte.pack()

label = tk.Label(screen)
label.pack()


def on_button(event=None): 

    inp = texte.get(1.0, "end-1c")

    if inp in ("/example", "/Example"):
        # change text in existing label
        label['text'] = "Loading Tournament".format(inp)

    else:
        label['text'] = "{0} is not a valid command".format(inp)

btn = tk.Button(screen, text="Enter", command=on_button)
btn.pack()

#texte.bind('<Return>', on_button)

texte.focus()

screen.mainloop()

当我键入 /example 时,它​​会打印 a 命令。我想这样做,这样我就可以在输入 /example 但使用相同的文本框之后输入另一个命令。

您的问题对于每次输入命令时希望发生的事情有些含糊,因此这部分只是一个猜测。至于在其他命令之后更改允许的内容的主要主题,我建议您定义一个变量来跟踪发生了什么处理,我在下面的代码中将其命名为 state。使用 state machine.

调用这种处理输入的方式

state变量为整数,初始化为0。当用户输入第一个有效命令时,state 变量被赋予值 1 以指示已经发生并开始允许输入其他命令。在该状态下,下面的代码将排除此时的任何内容,尽管它会检查特殊的“重启”命令以将状态重置回 0 并重新开始。当然,您可以在此主题上进行扩展,并根据需要拥有更多带有关联命令的状态。

import tkinter as tk

screen = tk.Tk()
screen.geometry('900x700')

texte = tk.Text(screen, height="5")

texte.place(x=100, y=0)
texte.pack()

label = tk.Label(screen)
label.pack()

state = 0
def on_button(event=None):
    global state

    inp = texte.get(1.0, 'end-1c')

    if state == 0:
        if inp.lower() == "/example":
            label['text'] = f"Loading Tournament {inp}"
            state = 1
        else:
            label['text'] = f"{inp} is not a valid command"
            # Stay in this state...
    elif state == 1:
        if inp.lower() == "restart":
            label['text'] = "restarted"
            state = 0
        else:
            label['text'] = f"processing command {inp}"
            # Stay in this state...

    texte.delete('1.0', 'end')  # Clear.
    texte.mark_set("insert", '1.0')  # Move insertion cursor to beginning.
    return 'break'  # Prevent further processing of event.


btn = tk.Button(screen, text="Enter", command=on_button)
btn.pack()

texte.bind('<Return>', on_button)

texte.focus()