我正在嘗試使用 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 但使用相同的文本框之后輸入另一個命令。
uj5u.com熱心網友回復:
您的問題對于每次鍵入命令時想要發生的事情有些模糊,因此這部分只是猜測。至于在其他命令之后更改允許的內容的主題,我建議您定義一個變數來跟蹤發生的處理,我state在下面的代碼中命名。這種處理輸入的方式稱為使用狀態機。
該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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/441044.html
