使用Python Tkinter创建个人简历录入系统

2023-2024第一学期《软件开发项目实训》

设计任务——个人简历录入系统

设计要求:(有界面)

设计一个“个人简历录入程序”,实现以下功能:

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()
本文作者:任尚仁
版权声明:本文为原创内容,转载请注明出处。如需获取更多相关资讯,可访问官网:https://blog.rensr.site/。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇