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 = ?
。
据我所知,您主要有两个选择:
- 从按钮本身获取文本
- 创建一个变量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()
最后一种方法的主要优点是您可以在条目构建前后播放文本。
当在主“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 = ?
。
据我所知,您主要有两个选择:
- 从按钮本身获取文本
- 创建一个变量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()
最后一种方法的主要优点是您可以在条目构建前后播放文本。