如何添加仅在 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()
我正在尝试用 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()