设计任务——个人简历录入系统
设计要求:(有界面)
设计一个“个人简历录入程序”,实现以下功能:
1、通过文本框录入姓名、地址、所学专业、毕业院校;
2、通过单选按钮选择性别;
3、通过复选框
4、通过列表框选择出生年月、政治面貌(党员、团员和群众)、所学课程;
5、设置了四个按键,当点击“提交”按键时,会在文本框中显示填写及选择的信息;当点击“保存”按键时,会保存以上信息;当点击“清空”按键时会清除当前所输入的信息;当点击“退出”按键时退出系统。参考界面如下:

步骤一:导入必要的库
首先,我们需要导入Tkinter库,以及datetime库用于处理日期相关的操作。
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
import datetime
步骤二:创建Tkinter窗口和基本布局
接下来,我们创建一个Tkinter窗口,并设置窗口的标题和基本布局。
class ResumeApp:
def __init__(self):
self.window = tk.Tk()
self.window.title("个人简历录入系统——任尚仁")
# ...(后续代码省略)
步骤三:创建个人信息录入部分
然后,我们创建用于输入个人信息的各种控件,如标签、输入框、单选按钮、下拉菜单等。
# 创建姓名文本框和性别单选按钮
self.name_label = tk.Label(self.window, text="姓名:")
# ...(后续代码省略)
步骤四:绑定事件处理函数和创建按钮
接着,我们绑定事件处理函数,比如当选择出生日期时自动计算年龄。同时,创建提交、保存、清空和退出等按钮。
# 绑定事件处理函数
self.year_combobox.bind("<<ComboboxSelected>>", self.calculate_age)
self.submit_button = tk.Button(self.window, text="提交", command=self.submit)
# ...(后续代码省略)
步骤五:定义提交、保存、清空等功能函数
最后,我们定义提交、保存、清空等功能函数,用于处理用户的输入和操作。
def submit(self):
# 处理提交逻辑
# ...
def save(self):
# 处理保存逻辑
# ...
def update_saved_info_text(self):
# 更新已保存信息的显示
# ...
def clear(self):
# 清空输入框
# ...
def calculate_age(self, event):
# 计算年龄
# ...
总结
通过以上步骤,我们完成了一个简单的个人简历录入系统的创建。在这个过程中,我们学习了如何使用Tkinter库创建窗口和控件,以及如何处理用户输入和事件响应。
下面是程序完成的效果:


以下是这个程序的完整代码:
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk
import datetime
class ResumeApp:
def __init__(self):
self.window = tk.Tk()
self.window.title("个人简历录入系统——任尚仁")
self.title_label = tk.Label(self.window, text="个人简历", font=("Arial", 16, "bold"))
self.title_label.grid(row=0, column=0, columnspan=6, pady=10)
# 创建姓名文本框和性别单选按钮
self.name_label = tk.Label(self.window, text="姓名:")
self.name_label.grid(row=1, column=0, sticky=tk.E)
self.name_entry = tk.Entry(self.window, width=12)
self.name_entry.grid(row=1, column=1, sticky=tk.W)
self.gender_label = tk.Label(self.window, text="性别:")
self.gender_label.grid(row=1, column=2, sticky=tk.E)
self.gender_var = tk.StringVar()
self.gender_var.set("男")
self.gender_male = tk.Radiobutton(self.window, text="男", variable=self.gender_var, value="男")
self.gender_male.grid(row=1, column=3, sticky=tk.W)
self.gender_female = tk.Radiobutton(self.window, text="女", variable=self.gender_var, value="女")
self.gender_female.grid(row=1, column=4, sticky=tk.W)
# 创建出生日期下拉菜单和年龄文本框
self.birth_label = tk.Label(self.window, text="出生日期:")
self.birth_label.grid(row=2, column=0, sticky=tk.W)
self.year_var = tk.StringVar()
self.month_var = tk.StringVar()
self.day_var = tk.StringVar()
self.year_combobox = ttk.Combobox(self.window, textvariable=self.year_var, width=8)
self.year_combobox['values'] = list(reversed(range(1900, datetime.datetime.now().year + 1)))
self.year_combobox.grid(row=2, column=1, sticky=tk.W)
self.year_combobox.set("年") # 添加年单位
self.month_combobox = ttk.Combobox(self.window, textvariable=self.month_var, width=5)
self.month_combobox['values'] = list(range(1, 13))
self.month_combobox.grid(row=2, column=2, sticky=tk.W)
self.month_combobox.set("月") # 添加月单位
self.day_combobox = ttk.Combobox(self.window, textvariable=self.day_var, width=5)
self.day_combobox['values'] = list(range(1, 32))
self.day_combobox.grid(row=2, column=3, sticky=tk.W)
self.day_combobox.set("日") # 添加日单位
self.age_label = tk.Label(self.window, text="年龄:")
self.age_label.grid(row=2, column=4, sticky=tk.E)
self.age_entry = tk.Entry(self.window, state="readonly", width=5)
self.age_entry.grid(row=2, column=5, sticky=tk.W)
# 创建住址文本框
self.address_label = tk.Label(self.window, text="住址:")
self.address_label.grid(row=3, column=0, sticky=tk.E)
self.address_entry = tk.Entry(self.window, width=50)
self.address_entry.grid(row=3, column=1, columnspan=5, sticky=tk.W)
# 创建政治面貌下拉菜单和所学课程列表框
self.political_label = tk.Label(self.window, text="政治面貌:")
self.political_label.grid(row=4, column=0, sticky=tk.E)
self.political_var = tk.StringVar()
self.political_combobox = ttk.Combobox(self.window, textvariable=self.political_var, width=8)
self.political_combobox['values'] = ["党员", "团员", "群众"]
self.political_combobox.grid(row=4, column=1, sticky=tk.W)
self.courses_label = tk.Label(self.window, text="所学课程:")
self.courses_label.grid(row=4, column=2, sticky=tk.E)
self.courses_listbox = tk.Listbox(self.window, selectmode=tk.SINGLE, height=5)
self.courses_listbox.insert(0, "计算机应用基础")
self.courses_listbox.insert(1, "Hadoop大数据")
self.courses_listbox.insert(2, "人工智能")
self.courses_listbox.insert(3, "JavaWeb应用开发")
self.courses_listbox.insert(4, "软件应用开发")
self.courses_listbox.grid(row=4, column=3, columnspan=3, sticky=tk.W)
# 创建所学专业文本框
self.major_label = tk.Label(self.window, text="所学专业:")
self.major_label.grid(row=5, column=0, sticky=tk.W)
self.major_entry = tk.Entry(self.window, width=50)
self.major_entry.grid(row=5, column=1, columnspan=4, sticky=tk.W)
# 创建爱好复选框
self.hobbies_label = tk.Label(self.window, text="爱好:")
self.hobbies_label.grid(row=6, column=0, sticky=tk.E)
self.basketball_var = tk.BooleanVar()
self.football_var = tk.BooleanVar()
self.badminton_var = tk.BooleanVar()
self.painting_var = tk.BooleanVar()
self.reading_var = tk.BooleanVar()
hobbies_checkboxes = [
("篮球", self.basketball_var),
("足球", self.football_var),
("羽毛球", self.badminton_var),
("绘画", self.painting_var),
("阅读", self.reading_var)
]
for idx, (text, var) in enumerate(hobbies_checkboxes):
checkbox = tk.Checkbutton(self.window, text=text, variable=var)
checkbox.grid(row=6, column=idx + 1, sticky=tk.W)
# 创建毕业院校文本框
self.school_label = tk.Label(self.window, text="毕业院校:")
self.school_label.grid(row=7, column=0, sticky=tk.E)
self.school_entry = tk.Entry(self.window, width=50)
self.school_entry.grid(row=7, column=1, columnspan=5, sticky=tk.W)
# 创建文件名文本框
self.filename_label = tk.Label(self.window, text="文件名:")
self.filename_label.grid(row=8, column=0, sticky=tk.E)
self.filename_entry = tk.Entry(self.window, width=50)
self.filename_entry.grid(row=8, column=1, columnspan=5, sticky=tk.W)
# 创建文本框用于显示保存的信息
self.saved_info_text = tk.Text(self.window,height=10, width=60)
self.saved_info_text.grid(row=9, column=0, columnspan=6, padx=10, pady=10)
# 创建按钮
self.submit_button = tk.Button(self.window, text="提交", command=self.submit)
self.submit_button.grid(row=10, column=1, padx=10, pady=10)
self.save_button = tk.Button(self.window, text="保存", command=self.save)
self.save_button.grid(row=10, column=2, padx=10, pady=10)
self.clear_button = tk.Button(self.window, text="清空", command=self.clear)
self.clear_button.grid(row=10, column=3, padx=10, pady=10)
self.quit_button = tk.Button(self.window, text="退出", command=self.window.quit)
self.quit_button.grid(row=10, column=4, padx=10, pady=10)
# 绑定事件处理函数
self.year_combobox.bind("<<ComboboxSelected>>", self.calculate_age)
self.month_combobox.bind("<<ComboboxSelected>>", self.calculate_age)
self.day_combobox.bind("<<ComboboxSelected>>", self.calculate_age)
# 创建一个字典用于存储已保存的信息,键为姓名,值为对应的信息
self.saved_info_dict = {}
def submit(self):
name = self.name_entry.get()
gender = self.gender_var.get()
year = self.year_var.get()
month = self.month_var.get()
day = self.day_var.get()
age = self.age_entry.get()
address = self.address_entry.get()
political = self.political_var.get()
# 检查是否至少选择了一个项目
selected_items = self.courses_listbox.curselection()
courses = self.courses_listbox.get(selected_items[0]) if selected_items else ""
# 构造信息字符串
hobbies = ''
hobbies_list = [
("篮球", self.basketball_var),
("足球", self.football_var),
("羽毛球", self.badminton_var),
("绘画", self.painting_var),
("阅读", self.reading_var)
]
for hobby, var in hobbies_list:
if var.get():
hobbies += f'{hobby} '
# 现在 'hobbies' 包含选定爱好的字符串
info_str = f'''{name}的个人简历
姓名:{name} 性别:{gender}
生日:{year}年{month}月{day}日 年龄:{age}
住址:{address}
政治面貌:{political} 所学课程:{courses}
所学专业:{self.major_entry.get()}
爱好:{hobbies}
毕业院校:{self.school_entry.get()}
文件名:{self.filename_entry.get()}\n\n'''
# 检查是否存在相同姓名的信息
if name in self.saved_info_dict:
# 弹出询问框,询问是否替换
response = messagebox.askyesno("替换确认", f"姓名为 {name} 的信息已存在,是否替换?")
if response:
# 替换已有信息
self.saved_info_dict[name] = info_str
# 在文本框中更新所有信息
self.update_saved_info_text()
messagebox.showinfo("替换成功", f"{name} 的信息已替换")
else:
# 用户选择不替换,清空输入字段
self.clear()
else:
# 添加新的信息到字典中
self.saved_info_dict[name] = info_str
# 在文本框中更新所有信息
self.update_saved_info_text()
messagebox.showinfo("保存成功", f"{name} 的信息已保存")
def save(self):
# 获取当前输入的姓名
name = self.name_entry.get()
# 检查是否存在相同姓名的信息
if name in self.saved_info_dict:
# 弹出询问框,询问是否替换
response = messagebox.askyesno("替换确认", f"姓名为 {name} 的信息已存在,是否替换?")
if response:
# 替换已有信息
self.submit()
# 在文本框中更新所有信息
self.update_saved_info_text()
messagebox.showinfo("替换成功", f"{name} 的信息已替换")
else:
# 用户选择不替换,清空输入字段
self.clear()
else:
# 添加新的信息到字典中
self.submit()
# 在文本框中更新所有信息
self.update_saved_info_text()
messagebox.showinfo("保存成功", f"{name} 的信息已保存")
def update_saved_info_text(self):
# 清空文本框
self.saved_info_text.delete("1.0", tk.END)
# 遍历字典,将所有信息添加到文本框中
for info in self.saved_info_dict.values():
self.saved_info_text.insert(tk.END, info)
def clear(self):
self.name_entry.delete(0, tk.END)
self.gender_var.set("男")
self.year_var.set("")
self.month_var.set("")
self.day_var.set("")
self.age_entry.delete(0, tk.END)
self.address_entry.delete(0, tk.END)
self.political_var.set("")
self.courses_listbox.selection_clear(0, tk.END)
self.basketball_var.set(False)
self.football_var.set(False)
self.major_entry.delete(0, tk.END)
self.school_entry.delete(0, tk.END)
self.filename_entry.delete(0, tk.END)
def calculate_age(self, event):
try:
birth_year = int(self.year_var.get())
birth_month = int(self.month_var.get())
birth_day = int(self.day_var.get())
birth_date = datetime.date(birth_year, birth_month, birth_day)
today = datetime.date.today()
age = today.year - birth_date.year - ((today.month, today.day) < (birth_date.month, birth_date.day))
self.age_entry.config(state="normal")
self.age_entry.delete(0, tk.END)
self.age_entry.insert(0, str(age))
self.age_entry.config(state="readonly")
except ValueError:
pass
app = ResumeApp()
app.window.mainloop()

