有没有一种方法可以从当前输入窗口使用/获取值

时间:2019-08-20 17:54:07

标签: loops tkinter multiple-instances tkinter-entry

我试图获取在按下回车键事件时在条目小部件中输入的变量,但是有点麻烦。我尝试过的结果始终是空白。 这段代码看起来很杂乱,很容易碰巧,但这只是我将在当前项目中使用的模板!

我已经尝试了很多方法来使其正常工作,我不记得自己尝试了什么!

from collections import OrderedDict
try:
    import tkinter as tk
except:
    import Tkinter as tk

root = tk.Tk()


labelLIST = OrderedDict([
                        ('Temp ID', 'tempID'),
                        ('PO Number', "poNumber"),
                        ('Reference', "reference"),
                        ('Cut/Sample Date', "csDate"),
                        ('Cut Number', "cut")
                        ])

i = 0
e_loops = len(labelLIST)
print (e_loops)


def bval1(event=None):
    for i in range(e_loops):
        print (entries[i].get())
    entries[0].delete(0, tk.END)
    entries[0].insert(0, 'DISABLED')
    entries[0].configure(state='disabled')


def bval2():
    entries[0].configure(state='normal')
    for i in range(e_loops):
        entries[i].delete(0, tk.END)
    entries[0].focus()


def onClick(event):
    ent = event.widget  # event.widget is the widget that called the event
    print(ent.cget("text"))  # Print the text for the selected button
    event.widget.tk_focusNext().focus()


def enterEV(event):
    # print(entries[].get())
    event.widget.tk_focusNext().focus()

entries = []
for key, value in labelLIST.items():
    label = tk.Label(root, text=key)
    label.grid(row=i, column=0, sticky="ew", padx=1, pady=1)
    entry = tk.Entry(root, width=10)
    entry.grid(row=i, column=1, sticky="ew", padx=5, pady=5)
    if value == "cut":
        entry.bind('<Return>', bval1)
    else:
        # entry.bind('<Return>', enterEV)
        entry.bind('<Return>', onClick)
    entries.append(entry)
    i = i+1

button = tk.Button(root, text="Submit", command=bval1)
button.grid(row=0, column=2, columnspan=9, sticky="ew")

button = tk.Button(root, text="Clear", command=bval2)
button.grid(row=1, column=2, columnspan=9, sticky="ew")

entries[0].focus()

tk.mainloop()

当按下回车键时,我希望通过onClick事件将输入框的值打印到终端。但是输出始终为空。

def onClick(event):
    ent = event.widget  # event.widget is the widget that called the event
    print(ent.cget("text"))  # Print the text for the selected button
    event.widget.tk_focusNext().focus()

1 个答案:

答案 0 :(得分:0)

您不会使用text属性在Entry小部件中获取值。使用cget("text")返回textvariable属性的值。由于您尚未设置该属性,因此它将始终是空字符串。

相反,您需要调用get方法:

print(ent.get())