Это версия, не основанная на ООП.
import tkinter as tk
root = tk.Tk()
history = []
history_index = -1
def runCommand(event):
command = cmd.get()
print("Running command: {}".format(command))
cmd.set("")
history.append(command)
history_index = -1
print(history)
def cycleHistory(event):
global history_index
if len(history):
try:
comm = history[history_index]
history_index -= 1
except IndexError:
history_index = -1
comm = history[history_index]
cmd.set(comm)
cmd = tk.StringVar(root)
e = tk.Entry(root,textvariable=cmd)
e.grid()
e.bind("<Return>",runCommand)
e.bind("<Up>",cycleHistory)
e.focus()
root.mainloop()
По сути, вам просто нужно сохранить запись о том, какой элемент из истории вы должны показать в следующий раз, когда пользователь нажимает стрелку вверх.Я использую поле history_index
, чтобы сделать это.history_index
изначально имеет значение -1, и каждый раз, когда к нему обращаются, оно уменьшается на 1.
Я использую исключение except IndexError
, чтобы сбросить индекс на -1, когда больше нет истории для чтения изсписок и снова начать с начала.
Нажатие клавиши возврата запускает команду, добавляет ее в историю и сбрасывает индекс на -1.