我正在尝试创建一个函数,它将enter绑定到“insert”框架中的下一个输入字段。但是,对于最后一个输入字段,它将返回所有字段中输入的文本。我尝试过使用迭代器获取下一个输入字段,但没有成功。我不熟悉Python和Tkinter。我的主要问题围绕着“getinsert”函数,我如何集中精力在下一个输入字段上?有没有什么方法可以让当前的焦点加1?另外,如何检查it是否在最后一个字段上,以便可以调用“getinsert”函数?在
任何帮助都将不胜感激
import tkinter as tk
from tkinter import messagebox
master = tk.Tk()
insertnames = ["Title", "Location", "Tags", "Section", "Blah"]
insertentries = {}
insertlabels = {}
main = tk.Frame(master)
insert = tk.Frame(master)
currentnames = iter(insertnames[0])
def mainmenu():
main.pack()
insertbutton.pack(fill = 'x')
def insertcall():
main.forget()
insert.pack()
insertform()
insertentries["Title"].bind('<Return>', insertfocus)
insertentries["Location"].bind('<Return>', insertfocus)
insertentries["Tags"].bind('<Return>', getinsert)
def getinsert(event):
for entry in insertentries:
print (insertentries[entry].get())
insertentries[entry].delete(0, 'end')
insert.forget()
mainmenu()
def insertfocus(event):
currentnames.next()
insertentries[currentnames].focus()
def insertform():
i = 0
for name in insertnames:
e = tk.Entry(insert)
e.grid(row = i, column = 1)
insertentries[name] = e
lab = tk.Label(insert, text = name)
lab.grid(row = i, column = 0)
insertlabels[name] = lab
i += 1
insertbutton = tk.Button(main, text = "Insert", command = insertcall)
mainmenu()
tk.mainloop()
您可以将相关条目小部件的<;Return>;键绑定到如下函数:
我知道这不是最好的选择,但是一个冗长的方法是硬编码。有更多字典经验的人也许可以在循环中完成,但我做不到:)
您正在复制tab键的功能,以便在一组小部件之间移动。这使用虚拟事件
<<NextWindow>>
和<<PrevWindow>>
。所以要做的是让您的<Return>
处理程序生成这个事件。然后对于最后一个条目,您要转到一个特定的小部件。我已经创建了一个这样做的例子。您可以在一个小部件集合中使用类似这样的东西,或者如果您深入研究tk_focusNext函数正在做什么来确定下一个小部件要转到的内容,您可以安排检查包含框架中的小部件。在Edit:通过从python生成遍历事件来模拟
tk::TabToWindow
函数相关问题 更多 >
编程相关推荐