如何在Tkinter界面主循环外访问Entry组件的用户输入变量
Tkinter Entry控件输入值获取问题解决方案
问题根源
root.mainloop()是Tkinter的阻塞式事件循环,只有窗口关闭后,循环之后的代码才会执行。你仅在回调函数中声明了Entry控件为全局变量,没有存储控件的输入值,自然无法在主循环外拿到用户输入。- 直接打印Entry对象
s_n只会输出控件本身的标识符,也就是你看到的!entry,要获取输入内容必须调用Entry控件的.get()方法。
修改后可用代码
from tkinter import * # 声明全局变量存储各输入框的最终值 s_n_val = "" n_o_p_val = "" s_t_val = "" f_n_val = "" c_val = "" root = Tk() s_n = Entry(root) n_o_p = Entry(root) s_t = Entry(root) f_n = Entry(root) c = Entry(root) # insert方法第一个参数为插入位置索引,填0表示从输入框最开头插入 s_n.insert(0, "Enter Subreddit name") n_o_p.insert(0, "Enter number of posts") s_t.insert(0, "Enter search type") f_n.insert(0, "Enter flair type") c.insert(0, "Enter amount of comments") s_n.pack() n_o_p.pack() s_t.pack() f_n.pack() c.pack() def myclick(): global s_n_val, n_o_p_val, s_t_val, f_n_val, c_val # 点击按钮时调用.get()方法获取输入值,存入全局变量 s_n_val = s_n.get() n_o_p_val = n_o_p.get() s_t_val = s_t.get() f_n_val = f_n.get() c_val = c.get() myButton = Button(root, text="Enter: ", command=myclick) myButton.pack() root.mainloop() # 窗口关闭后即可直接打印存储的输入值 print(s_n_val) print(n_o_p_val) print(s_t_val) print(f_n_val) print(c_val)
补充说明
如果不需要关闭窗口后再处理输入值,可以直接把业务逻辑写在myclick回调函数中,点击按钮后即可实时拿到输入值执行后续操作。
内容的提问来源于stack exchange,提问作者Lewis Revel
相关产品推荐
相关产品推荐

