最近在做Python的课程作业,遇到一个问题,描述如下:

使用Python内置的Tkinter模块进行GUI编程

给一个按钮(或菜单)绑定事件,打开一个新窗口,新窗口内有Entry若干,通过textvariable选项绑定变量,用于获取用户输入,但通过控制台输出(或方法参数传递)检查得知,程序获取到的数据全是空,即无任何有效内容被捕获。

源代码如下:

 def new_restaurant():
new_window=tk.Tk()
new_window.title("新建餐厅(New restaurant)")
new_window.geometry('700x500') tk.Label(new_window,text='填写餐厅详细信息',font=("微软雅黑", 16)).grid(row=0,column=0,pady=5,padx=10) e_name = tk.StringVar()
e_id = tk.StringVar()
e_borough = tk.StringVar()
e_coord_x = tk.StringVar()
e_coord_y = tk.StringVar()
e_street=tk.StringVar()
e_building=tk.StringVar()
e_zipcode=tk.StringVar()
e_cuisine=tk.StringVar() tk.Label(new_window,text='餐厅名',font=("微软雅黑", 12)).grid(row=1,column=0)
tk.Entry(new_window,textvariable = e_name,font=("微软雅黑", 12)).grid(row=1,column=1,columnspan=2) tk.Label(new_window,text='餐厅ID',font=("微软雅黑", 12)).grid(row=2,column=0)
tk.Entry(new_window,font=("微软雅黑", 12),textvariable =e_id).grid(row=2,column=1,columnspan=2) tk.Label(new_window,text='所在地/自治市',font=("微软雅黑", 12)).grid(row=3,column=0)
tk.Entry(new_window,font=("微软雅黑", 12),textvariable=e_borough).grid(row=3,column=1,columnspan=2) tk.Label(new_window,text='坐标',font=("微软雅黑", 12)).grid(row=4,column=0)
tk.Label(new_window,text=' X坐标',font=("微软雅黑", 12)).grid(row=4,column=1)
tk.Entry(new_window,font=("微软雅黑", 12),textvariable =e_coord_x,width=5).grid(row=4,column=2)
tk.Label(new_window,text=' Y坐标',font=("微软雅黑", 12)).grid(row=4,column=3)
tk.Entry(new_window,font=("微软雅黑", 12),textvariable =e_coord_y,width=5).grid(row=4,column=4) tk.Label(new_window,text='街道',font=("微软雅黑", 12)).grid(row=5,column=0)
tk.Entry(new_window,font=("微软雅黑", 12),textvariable =e_street).grid(row=5,column=1,columnspan=2) tk.Label(new_window,text='建筑号',font=("微软雅黑", 12)).grid(row=6,column=0)
tk.Entry(new_window,font=("微软雅黑", 12),textvariable =e_building).grid(row=6,column=1,columnspan=2) tk.Label(new_window,text='邮政编码',font=("微软雅黑", 12)).grid(row=7,column=0)
tk.Entry(new_window,font=("微软雅黑", 12),textvariable =e_zipcode).grid(row=7,column=1,columnspan=2) tk.Label(new_window,text='主菜',font=("微软雅黑", 12)).grid(row=8,column=0)
tk.Entry(new_window,font=("微软雅黑", 12),textvariable =e_cuisine).grid(row=8,column=1,columnspan=2)
save_button=tk.Button(new_window,text='保存(Save)',command=lambda : save_new(e_name.get(),e_borough.get(),e_coord_x.get(),e_id.get(),\
e_coord_y.get(),e_street.get(),e_zipcode.get(),e_cuisine.get(),e_building.get(),\
e_date1.get(),e_grade1.get(),e_score1.get(),\
e_date2.get(),e_grade2.get(),e_score2.get(),\
e_date3.get(),e_grade3.get(),e_score3.get(),\
e_date4.get(),e_grade4.get(),e_score4.get(),\
e_date5.get(),e_grade5.get(),e_score5.get()\
))
save_button.grid(row=16,column=1) new_window.mainloop()

通过查询资料获得了解决办法,特记录如下:

错误原因:使用了tk.Tk()方法来新建窗口,这样得到的是一个新的根窗口,无法与原来的根窗口进行有效交互。

因此需要使用Toplevel组件新建顶级窗口,Toplevel 组件是一个独立的顶级窗口,这种窗口通常拥有标题栏、边框等部件,和 Tk() 创建出来的根窗口是一样的,共享着一样的方法。

解决办法:替换第二行代码 new_window=tk.Tk() 为 new_window=tk.Toplevel()

Tkinter关于新建窗口内Entry无法获取值(值全为空)的解决办法的更多相关文章

  1. android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法

    android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法 原方法: public static Bitmap getSmallBitmap(Strin ...

  2. js获取浮动(float)元素的style.left值为空的解决办法

    解决办法: 1.使用行内样式设置元素的top和left值; 2.or直接获取元素的offsetLeft得到相关数值,还不需要parseInt 问题原因: 如果父div的position定义为relat ...

  3. UiAutomatorViewer无法获取手机截图进行元素定位的解决办法

    问题描述 本来想使用UIAutomatorView定位app页面元素的,最开始我使用的是夜神模拟器,打开UIAutomatorView连接模拟器没有问题,但是后来我使用真机时发现无法连接到真机获取真机 ...

  4. 在cmd窗口下运行Java程序时无法找到主类的解决办法

    我是Java的初学者,昨天在cmd窗口下运行一段Java程序时总是有问题,可以编译但无法执行. 也就是javac时正确,一旦java时就不对了,提示找不到或无法加载主类,经百度谷歌再加上自己的摸索终于 ...

  5. nginx反向代理服务器获取不到端口的问题的解决办法

    使用nginx为反向代理服务器时,后端应用程序获取不到请求端口的解决办法. 以下是nginx 简单的配置 server {         listen       81;         serve ...

  6. 【js】react-native Could not find iPhone 6 simulator 和 Entry, ":CFBundleIdentifier", Does Not Exist 两种报错解决办法

    一.在运行rn app应用时,react-native run:ios 报错出现   Could not find iPhone 6 simulator  解决办法: 1.react-native r ...

  7. 在IDEA中使用JDBC获取数据库连接时的报错及解决办法

    在IDEA中使用JDBC获取数据库连接时,有时会报错Sat Dec 19 19:32:18 CST 2020 WARN: Establishing SSL connection without ser ...

  8. 新建虚拟机ping不通windows主机,windows主机ping不通虚拟机解决办法(图文)

    说明: 新建虚拟机和主机互ping不通,因此使用xhell等远程连接工具连接不上 解决办法:配置的时候注意网段 2.修改   /etc/sysconfig/network-scripts/ifcfg- ...

  9. Python内置的urllib模块不支持https协议的解决办法

    Django站点使用django_cas接入SSO(单点登录系统),配置完成后登录,抛出“urlopen error unknown url type: https”异常.寻根朔源发现是python内 ...

随机推荐

  1. 组件文档系统-mdx-react-docz

    推荐指数:

  2. logstash 6.6.0 读取nginx日志 插入到elasticsearch中

    logstash.conf input { # For detail config for log4j as input, # See: https://www.elastic.co/guide/en ...

  3. 对String对象进行JSON序列化

    对对象进行JSON序列化,会得到类似key:value的形式. 但是如果对一个String字符串进行JSON序列化会得到什么? 测试下: public class TestMain2 {     pu ...

  4. 第5课.linux进阶命令

    1.find:查找符合条件的文件 格式: find 目录名 选项 查找条件 eg: find /work/001_linux_basic/dira/ -name "test1.txt&quo ...

  5. Django时区导致的datetime时间比较报错

    我们使用python 的datetime模块比较Django数据库Datetime字段的时候,可能会出现报错: TypeError: can't compare offset-naive and of ...

  6. python线程障碍对象Barrier(34)

    python线程Barrier俗称障碍对象,也称栅栏,也叫屏障. 一.线程障碍对象Barrier简介 # 导入线程模块 import threading # 障碍对象barrier barrier = ...

  7. 使用RestTemplate进行服务调用的几种方式

    首先我们在名为MSG的服务中定义一个简单的方法 @RestController public class ServerController { @GetMapping("/msg" ...

  8. fork() 函数简介

    fork() 函数简介 fork系统调用用于创建一个新进程,称为子进程,它与进行fork()调用的进程(父进程)并发运行.创建新的子进程后,两个进程都将执行fork()系统调用之后的下一条指令.子进程 ...

  9. Python字符串图解

    >>> word = "Python" >>> word[:2]  # character from the beginning to posi ...

  10. 准备写个Golang开发的教程

    进入golang的开发已经差不多两年了,最近打算写个Golang的教程.目的是让有开发基础,没接触过Golang的人能够愉快高效地写出Golang项目. 1 记得17年底时候,有个特别小的项目,准备试 ...