求助:Tkcalendar的DateEntry未在注册窗口打开,显示于登录主窗口
问题解决:DateEntry组件显示位置错误及数据绑定修复
核心问题原因
创建DateEntry组件时未指定父窗口,Tkinter组件默认将主窗口(root)作为父容器,导致组件出现在登录窗口而非注册窗口。同时原代码未将DateEntry与dobentered变量绑定,无法获取选中的日期值。
修改步骤
- 修正DateEntry的父容器与数据绑定
在registerWindow类的__init__方法中,替换原DateEntry创建代码:
# 原错误代码 # self.cal = DateEntry(selectmode='day').grid(row=2,column=1) # 修改后的代码 self.cal = DateEntry(self.master, selectmode='day', textvariable=self.dobentered) self.cal.grid(row=2, column=1)
self.master指定组件的父窗口为注册窗口(Toplevel实例)textvariable=self.dobentered将组件选中值与你定义的变量绑定,后续可通过self.dobentered.get()直接获取日期字符串
- 补充性别下拉框的数据绑定(可选)
原代码中性别Combobox未绑定到genderentered变量,无法获取选中值,可同步修改:
# 原代码 # self.genderBox = Combobox(self.master, values = ["Male","Female"]) # 修改后的代码 self.genderBox = Combobox(self.master, values=["Male","Female"], textvariable=self.genderentered)
验证效果
修改后点击注册按钮,DateEntry会正确显示在注册窗口内,选择日期后,inputuser方法中的dobentered = self.dobentered.get()可直接获取符合YYYY-MM-DD格式的日期,适配现有验证逻辑,验证通过后可正常存入数据库。
内容的提问来源于stack exchange,提问作者dexta
相关产品推荐
相关产品推荐

