Tkinter Entry 小部件在顶层使用时返回一个空列表 window

Tkinter Entry widget is returning an empty list when used in a toplevel window

当在主“root”window 中按下新建 Window 按钮时,我试图打开一个新的 window。这目前有效并且确实打开了第二个 window。在第二个 window 中,我想询问用户输入,然后这个输入将变成一个字符串列表。

一个示例输入是 "Amy, Bob, Carl"。预期输出将是 ['Amy', 'Bob', 'Carl'] 但目前程序只是 returns [''].

我当前的代码是:

from tkinter import *

root = Tk()
root.title("Welcome screen")
root.geometry("300x300")

def open_new_window():

    top = Toplevel()
    top.title("second window")

    entities = Entry(top)
    entries = entities.get().split(", ")
    entities.pack()
    entities.focus_set()
    print(entries)

    sub_button = Button(top, text="Submit", command= ?)
    sub_button.pack(pady=20)
    close_btn = Button(top, text="Close", command=top.destroy)
    close_btn.pack()

open_button = Button(root, text="New Window", command=open_new_window)
open_button.pack(pady=20)
exit_button = Button(root, text="Close", command=root.destroy)
exit_button.pack(pady=20)
root.mainloop()

我是 Tkinter 的新手,我不确定为什么会这样。我确定这是一个简单的愚蠢错误,但我找不到哪里出错了。我也不确定我是否需要 提交 按钮,因为我不知道应该向它传递什么命令。

如有任何建议,我们将不胜感激。如果需要任何其他信息,请告诉我。

首先,我们会理解为什么你得到一个空列表:你的代码是顺序执行的,所以当你执行entities.get()时你还没有写任何东西也没有按下“提交”,即你想要按下“提交”后阅读输入框,而不是更早,因此,您有 command = ?。 据我所知,您主要有两个选择:

  1. 从按钮本身获取文本
  2. 创建一个变量link输入框并阅读此

方法一:从条目中读取数据

from tkinter import *

root = Tk()
root.title("Welcome screen")
root.geometry("300x300")

def do_stuff(entry):
    print(entry.get())

def open_new_window():

    top = Toplevel()
    top.title("second window")

    entities = Entry(top)
    entities.pack()
    entities.focus_set()

    sub_button = Button(top, text="Submit", command= lambda: do_stuff(entities))
    sub_button.pack(pady=20)
    close_btn = Button(top, text="Close", command=top.destroy)
    close_btn.pack()

open_button = Button(root, text="New Window", command=open_new_window)
open_button.pack(pady=20)
exit_button = Button(root, text="Close", command=root.destroy)
exit_button.pack(pady=20)
root.mainloop()

方法二:link一个变量

from tkinter import *

root = Tk()
root.title("Welcome screen")
root.geometry("300x300")

def do_stuff(text_entry):
        print(text_entry.get())

def open_new_window():

    top = Toplevel()
    top.title("second window")

    text_entry = StringVar()
    entities = Entry(top, textvariable = text_entry)
    entities.pack()
    entities.focus_set()

    sub_button = Button(top, text="Submit", command= lambda: do_stuff(text_entry))
    sub_button.pack(pady=20)
    close_btn = Button(top, text="Close", command=top.destroy)
    close_btn.pack()

open_button = Button(root, text="New Window", command=open_new_window)
open_button.pack(pady=20)
exit_button = Button(root, text="Close", command=root.destroy)
exit_button.pack(pady=20)
root.mainloop()

最后一种方法的主要优点是您可以在条目构建前后播放文本。