柠檬少年|Python GUI项目实战(四)实现学生明细窗体GUI的设计( 二 )
效果演示:明细窗体的GUI框架
二、加载明细窗体加载学生明细信息我们应该设置三种状态:查看、添加、修改;
1. 功能需求
- 在查看状态下 , 标题是:查看学生明细 , 各信息栏输入框中所有的信息都是只读状态 , 并且右下角的保存按钮处于隐藏状态;
- 在添加状态下 , 标题是:添加学生明细 , 各信息栏输入框清空 , 右下角保存按钮可用;
- 在修改状态下 , 标题是:修改学生明细 , 各信息栏除学号不能修改外 , 其余信息栏均可修改 , 并且右下角保存按钮可用 。
import detailguidef load_detail_window(self):detail_window = detailgui.DetailWindow()接着 , 我们再定义一个add_student的函数 , 在这个函数中调用load_detail_window方法def add_student(self):self.load_detail_window()然后在按钮中添加command参数 , 其值为add_student; 这样做似乎貌似实现了简单的加载学生明细窗体的功能 , 实际上当我们执行程序 , 点击添加学生按钮后 , 系统会报错_tkinter.TclError: image "pyimage4" doesn't exist这是什么原因呢?在tkinter里面有一个类Tk,其功能是产生一个主窗体 , 我们前面每次创建窗体时都用到了它 。 但是在tkinter里有一个规定 , 应用程序同时只能运行一个主窗体 。 而这里我们的主窗体一直在运行 , 是没有办法再加载一个主窗体(明细信息)的 。 如果想同时加载两个窗体 , 第二个窗体必须要以子窗体的形式打开 , 这里我们就可以使用Toplevel来创建子窗体 。所以 , detialgui的DetailWindow类所继承的类应该由Tk , 换成Toplevel即可 。这时候又出现了一个小bug,pane与明细窗体发生了脱离 , 这是因为我们前面创建pane容器的时候忘记设置它的属主了 , 这里添加一个构建函数中添加一个self参数就可以了 。 现在点击添加学生按钮 , 就可以正常加载明细信息窗口了!
所以 , 出现这个问题的根源所在就是:使用Tk这个类实例化一个窗体 , 这个窗体是一个主窗体 。 已经实例化了一个主窗体 , 再实例化一个是不可以的 。 所以第二个窗体必须用Toplevel实例化 。
三、实现三种状态加载明细窗体1. 点击按钮触发前面我们已经实现了添加明细信息的功能 , 现在我们继续实现修改明细信息的功能 。 我们新定义一个update_student()函数:
def update_student(self):self.load_detail_window()然后在修改学生按钮中添加command参数即可 。2. 双击表格触发我们想双击TreeView中的某一行表格 , 就能触发查看明细信息的功能 , 首先我们定义一个查看明细信息的方法view_student(),由于双击是一个事件 , 所以在调用函数的时候需要添加一个参数event
def view_student(self,event):self.load_detail_window()然后在 setup_UI()函数的结尾处 , 添加触发双击表格某一行的事件 , 写法是:使用bind()方法 , 第一个参数一定要以Double开头 , 体现是一个双击事件 , 第二个函数为对应的触发函数 。
推荐阅读
- 金戈鐵馬|特朗普力挺铁杆支持者,枪杀两人的少年没错?抗议活动不断发酵
- 开封于七一|育迎宾尚法好少年,借温柔秋风多送法
- 少年|央视要搞选秀,热搜沸了!网友提名他当导师,点赞数第一
- 暖夏少年|2020电脑硬盘销量排行榜:七彩虹加入战局,硬是打倒了金士顿
- 少年一梦|2020畅销手机排行,iPhone无人超越,安卓旗舰全线溃败
- 少年帮|进入倒计时,华为突然宣布,供应链将迎来“洗牌”?
- 艾希大人|竹内结子拍摄杂志封面 柠檬黄上衣青春活力
- 少年帮|纯国产“龙芯”即将来临,正式确认?中科院宣布决定
- 上线|原创央视也搞成团选秀!《上线吧!华彩少年》有哪些优势?粉丝放心了
- 海报|央视首档少年成团选秀节目《上线吧!华彩少年》开始全球招募
