关于 python:tkinter 循环遍历 List On Key Press
tkinter Loop Through List On Key Press
我正在尝试使用 tkinter 条目小部件和向上/向下箭头键创建命令历史记录。这是一个非常基本的 MUD 客户端,我想在业余时间想出。
|
1
2 3 4 5 6 7 8 9 10 11 |
# The list that hold the last entered commands.
self.previousCommands = [] # Binding the up arrow key to the Entry widget. # The function that should cycle through the commands. |
基本上,我想要做的是使用向上和向下箭头键循环浏览包含上次输入命令历史的列表。这种行为在大多数 MUD 客户端中很常见,但我无法确切了解这是如何实现的。
使用上面的代码,我可以将向上箭头键按下绑定到 Entry 小部件,并在按下时插入最后输入的命令。如果我要继续按向上箭头键,我希望它继续循环浏览列表中最后输入的命令。
相关讨论
- 看起来不错,你的问题是什么?
- 假设我有一个包含 ['dret', 'drci', 'egad'] 的列表。我想知道是否有人知道我将如何循环浏览该列表并使用向上箭头键填充条目小部件。使用上面的代码,我可以获得列表中的最后一个元素。然后我想再次按向上箭头,并获取列表中的倒数第二个元素。第三次向上箭头,并获得倒数第三个元素。我希望有人能给我一个关于如何实现结果的想法。所以为了简化,如何通过按绑定到 tkinter 中的 Entry 小部件的向上箭头键来循环列表中的元素?
Question: cycle the elements in a list by pressing
Up /Down arrow key bound toEntry widget
创建一个继承自
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import tkinter as tk
class EntryHistory(tk.Entry): self.history = [] if init_history: def up_down(self, event): if event.keysym == 'Up': self.insert(0, self.history[self.last_idx]) def add(self, event): if __name__ =="__main__": |
用 Python 测试:3.5
这是一个非基于 OOP 的版本。
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
import tkinter as tk
root = tk.Tk() history = [] def runCommand(event): def cycleHistory(event): cmd = tk.StringVar(root) root.mainloop() |
基本上,您只需要记录下一次用户按下向上箭头时应该显示的历史记录中的哪个项目。我使用
一旦没有更多历史可从列表中读取并重新从头开始,我使用
按回车键,运行命令,将其添加到历史记录并将索引重置为-1。