柠檬少年|Python GUI项目实战(四)实现学生明细窗体GUI的设计
前言在上一节Python GUI项目实战(三)实现信息查询功能 我们实现了在主窗体中通过单条件查询或者组合查询进行学生信息的筛选功能 , 系统能够在所有的数据中精确地找到某个具体的符合条件的学生信息 。 但是我们发现在主窗体中显示的都是概要信息 , 如果我们想要鼠标双击表格中的某一项就想查看某个学生的详细信息该怎么实现呢?
这一节我们将搭建一个显示学生详细信息的明细窗体 , 显示该学生的所有信息 , 只要双击表格中的某一行就能打开 。 同时显示学生明细信息时我们的明细窗体要表现出三种不同的状态 , 同时应对显示、添加、和修改三种情况 。 在不同的状态下窗体显示的得标题是不同的 。 我们现在就开始着手操作吧这个项目吧~
一、学生明细窗体GUI基本布局我们新建一个detailgui.py文件 , 显示学生明细信息 。 主要显示的内容有:学号、姓名、性别、出生日期、身份证号码、手机号码、邮箱地址、家庭住址、入学时间、专业、紧急联系人、紧急联系电话;其中性别我们通过Radiobutton的方式显示 , 其余都通过Label和Entry来显示 。
本文重点讲解的内容是逻辑与实现部分;关于tkinter布局的基础知识 , 这里主要用到的主要是Label标签和Entry输入框还有Radiobutton单选框的绘制 , 我们前面的文章Python基础学习笔记(十三)图形化界面Tkinter 已经做了具体的讲解 , 这里就不再继续重复介绍了 。
下面直接给出界面布局的代码:
from tkinter import *from tkinter.ttk import *import osclass DetailWindow(Tk):def __init__(self):super().__init__()self.title("学生明细信息")self.geometry("600x500+600+150")self.resizable(0,0) # 不能改变大小# 加载控件self.setup_UI()def setup_UI(self):# 设置styleself.Style01 = Style()self.Style01.configure("title.TLabel",font=("微软雅黑",25,"bold"),foreground = "navy")self.Style01.configure("TLabel", font=("微软雅黑", 16, "bold"), foreground="navy")self.Style01.configure("TButton",font=("微软雅黑",16,"bold"),foreground = "navy")self.Style01.configure("TEntry", font=("微软雅黑", 16, "bold"),width = 10)self.Style01.configure("TRadiobutton",font=("微软雅黑",16,"bold"),foreground = "navy")# 加载上面的bannerself.Login_image = PhotoImage(file = "."+os.sep+"img"+os.sep+"stu_detail_banner.png")self.Label_image = Label(self,image = self.Login_image)self.Label_image.pack()# 添加一个titleself.var_title = StringVar()self.Label_title = Label(self,text="==明细窗体==",style = "title.TLabel")self.Label_title.place(x=380,y=20)# 加载一个paneself.Pane_detail = PanedWindow(width = 590,height = 380)self.Pane_detail.place(x = 5,y = 88)# 添加属性# 第一排:学号self.Label_sno = Label(self.Pane_detail,text = "学号:")self.Label_sno.place(x=30,y=10)self.var_sno = StringVar()self.Entry_sno = Entry(self.Pane_detail,textvariable = self.var_sno,font=("微软雅黑", 16, "bold"),width = 10)self.Entry_sno.place(x=80,y=8)# 姓名self.Label_name = Label(self.Pane_detail,text = "姓名:")self.Label_name.place(x=220,y=10)self.var_name = StringVar()self.Entry_name = Entry(self.Pane_detail,textvariable = self.var_name,font=("微软雅黑", 16, "bold"),width = 10)self.Entry_name.place(x=270,y=8)# 性别self.Label_gender = Label(self.Pane_detail,text = "性别:").place(x=410,y = 10)self.var_gender = IntVar()self.Radio_man = Radiobutton(self.Pane_detail,text="男",variable = self.var_gender,value = http://kandian.youth.cn/index/1)self.Radio_man.place(x=460,y = 10)self.Radio_woman = Radiobutton(self.Pane_detail, text="女", variable=self.var_gender, value=http://kandian.youth.cn/index/0)self.Radio_woman.place(x=510, y=10)# 第二排:出生日期self.Label_age = Label(self.Pane_detail,text="出生日期:")self.Label_age.place(x=30,y=60)self.var_age = StringVar()self.Entry_age = Entry(self.Pane_detail,textvariable = self.var_age,font=("微软雅黑", 16, "bold"),width = 12)self.Entry_age.place(x=110,y=58)# 身份证号码self.Label_id = Label(self.Pane_detail, text="身份证号码:")self.Label_id.place(x=250, y=60)self.var_id = StringVar()self.Entry_id = Entry(self.Pane_detail, textvariable=self.var_id,font=("微软雅黑", 16, "bold"), width=19)self.Entry_id.place(x=350, y=58)# 第三排:手机号码self.Label_mobile = Label(self.Pane_detail, text="手机号码:")self.Label_mobile.place(x=30, y=110)self.var_mobile = StringVar()self.Entry_mobile = Entry(self.Pane_detail, textvariable=self.var_mobile,font=("微软雅黑", 16, "bold"), width=14)self.Entry_mobile.place(x=110, y=108)# 邮箱地址self.Label_email = Label(self.Pane_detail, text="邮箱地址:")self.Label_email.place(x=270, y=110)self.var_email = StringVar()self.Entry_email = Entry(self.Pane_detail, textvariable=self.var_email,font=("微软雅黑", 16, "bold"), width=19)self.Entry_email.place(x=350, y=108)# 第四排:家庭住址self.Label_home = Label(self.Pane_detail, text="家庭住址:")self.Label_home.place(x=30, y=160)self.var_address = StringVar()self.Entry_home = Entry(self.Pane_detail, textvariable=self.var_address,font=("微软雅黑", 16, "bold"), width=43)self.Entry_home.place(x=110, y=158)# 第五排:入学时间self.Label_studyin = Label(self.Pane_detail, text="入学时间:")self.Label_studyin.place(x=30, y=210)self.var_studyin = StringVar()self.Entry_studyin = Entry(self.Pane_detail, textvariable=self.var_studyin,font=("微软雅黑", 16, "bold"), width=12)self.Entry_studyin.place(x=110, y=208)# 专业:self.Label_pro = Label(self.Pane_detail, text="专业:")self.Label_pro.place(x=250, y=210)self.var_pro = StringVar()self.Entry_pro = Entry(self.Pane_detail, textvariable=self.var_pro,font=("微软雅黑", 16, "bold"), width=24)self.Entry_pro.place(x=300, y=208)# 第六排:紧急联系人self.Label_emcon = Label(self.Pane_detail, text="紧急联系人:")self.Label_emcon.place(x=30, y=260)self.var_emcon = StringVar()self.Entry_emcon = Entry(self.Pane_detail, textvariable=self.var_emcon,font=("微软雅黑", 16, "bold"), width=11)self.Entry_emcon.place(x=120, y=258)# 紧急联系电话self.Label_emtel = Label(self.Pane_detail, text="紧急联系人电话:")self.Label_emtel.place(x=250, y=260)self.var_emtel = StringVar()self.Entry_emtel = Entry(self.Pane_detail, textvariable=self.var_emtel,font=("微软雅黑", 16, "bold"), width=16)self.Entry_emtel.place(x=380, y=258)# 放置两个按钮self.Button_save = Button(self,text = "保存",style = "TButton").place(x=400,y=472)self.Button_exit = Button(self,text = "关闭",style = "TButton").place(x=502,y=472)if __name__ == '__main__':this_window = DetailWindow()this_window.mainloop()
推荐阅读
- 金戈鐵馬|特朗普力挺铁杆支持者,枪杀两人的少年没错?抗议活动不断发酵
- 开封于七一|育迎宾尚法好少年,借温柔秋风多送法
- 少年|央视要搞选秀,热搜沸了!网友提名他当导师,点赞数第一
- 暖夏少年|2020电脑硬盘销量排行榜:七彩虹加入战局,硬是打倒了金士顿
- 少年一梦|2020畅销手机排行,iPhone无人超越,安卓旗舰全线溃败
- 少年帮|进入倒计时,华为突然宣布,供应链将迎来“洗牌”?
- 艾希大人|竹内结子拍摄杂志封面 柠檬黄上衣青春活力
- 少年帮|纯国产“龙芯”即将来临,正式确认?中科院宣布决定
- 上线|原创央视也搞成团选秀!《上线吧!华彩少年》有哪些优势?粉丝放心了
- 海报|央视首档少年成团选秀节目《上线吧!华彩少年》开始全球招募
