在python中用tkinter设计一个学生通讯录,可以添加、删除、修改里面的信息。
该回答引用chatgpt:
import tkinter as tk
from tkinter import simpledialog, messagebox
class StudentContactApp:
def __init__(self):
self.root = tk.Tk()
self.root.title("学生通讯录")
self.students = []
self.create_widgets()
def create_widgets(self):
# 学生信息显示框
self.student_listbox = tk.Listbox(self.root, width=40)
self.student_listbox.pack(pady=10)
# 添加按钮
add_button = tk.Button(self.root, text="添加学生", command=self.add_student)
add_button.pack(pady=5)
# 删除按钮
delete_button = tk.Button(self.root, text="删除学生", command=self.delete_student)
delete_button.pack(pady=5)
# 修改按钮
edit_button = tk.Button(self.root, text="修改学生", command=self.edit_student)
edit_button.pack(pady=5)
def add_student(self):
student_name = simpledialog.askstring("添加学生", "请输入学生姓名:")
if student_name:
student_contact = simpledialog.askstring("添加学生", "请输入学生联系方式:")
if student_contact:
student = {"姓名": student_name, "联系方式": student_contact}
self.students.append(student)
self.student_listbox.insert(tk.END, f"{student_name} - {student_contact}")
def delete_student(self):
selected_index = self.student_listbox.curselection()
if selected_index:
confirm = messagebox.askokcancel("删除学生", "确认删除所选学生?")
if confirm:
student = self.students.pop(selected_index[0])
self.student_listbox.delete(selected_index)
messagebox.showinfo("删除成功", f"已删除学生: {student['姓名']} - {student['联系方式']}")
def edit_student(self):
selected_index = self.student_listbox.curselection()
if selected_index:
student = self.students[selected_index[0]]
new_name = simpledialog.askstring("修改学生", "请输入新的学生姓名:", initialvalue=student['姓名'])
if new_name:
new_contact = simpledialog.askstring("修改学生", "请输入新的学生联系方式:", initialvalue=student['联系方式'])
if new_contact:
student['姓名'] = new_name
student['联系方式'] = new_contact
self.student_listbox.delete(selected_index)
self.student_listbox.insert(selected_index, f"{new_name} - {new_contact}")
messagebox.showinfo("修改成功", f"学生信息已修改为: {new_name} - {new_contact}")
def run(self):
self.root.mainloop()
# 创建学生通讯录应用程序并运行
app = StudentContactApp()
app.run()
不知道你这个问题是否已经解决, 如果还没有解决的话:本篇不适合python刚入门的人,刚入门指刚考过国二计算机python,最好在学习过爬虫、数据分析后在来看(文章中用到一点pandas的知识),因为我们在写完一个程序后(此时肯定成就感爆棚)总是想分享给别人(无形装逼),而分享给别人不能只是用pyinstaller打包吧?那实在是太low了达不到我们想要的装逼效果,这个时候你就需要一个装逼神器,没错那就是GUI用户界面,至于为什么选择tkinter而不是pyQt5,很简单因为这东西是给自己用的,python自带的tkinter完全满足需求,对于刚接触GUI的同学来说最好不要好高骛远,当然了还有一个原因是pyQt5安装太费劲了,过程中可能遇到好多问题,导致一个结果可能是还没开始学就被劝退了,所以如果你以后想要深入发展的话再去学pyQt5,或者直接去学pyQt5,当然对于我来说完全没有这个需求,tkinter足够用了,因为我只是想以后写爬虫或者其他脚本的时候用tkinter简单包装一下方便我人前显圣罢了。
好了,言归正传,学习提升最快的途径就是直接做项目,能看到这的人基础都不差,先来看看我们上半篇要达到的效果,上图:
好了,我们首先要完成的就是这两个主界面,包括登录跳转,以及第二张图中的查询功能,其他功能放在下一篇 ,登录界面的图片是我在网上找的(你也可以找自己喜欢的),虽然这辈子是考不上清华了,但这并不妨碍我做梦(哈哈),讲解以及注释代码中已经很详细了,如果实在不明白就去百度,最好参照我学习的时候使用的网址(里面的老师讲解的很好)配合我的代码一起学习(原谅我不自己进行讲解,实在是有心无力,精力有限,而且我也是参照他的,老师已经讲的很详细了,所以在此我就借花献给位帅哥美女了)
网址:
Python GUI项目实战(一)登录窗体的设计与实现 - 云+社区 - 腾讯云 (tencent.com)代码很多不要被劝退了,每个部分从头自己写的话,其实也没什么难的,原理都一样,需要注意的是每个函数的参数意义,pycharm再写tkinter的时候很坑,因为他不给参数提示,导致有很多好用的方法我最开始都不知道,都是我在网上一点点查出来的,如果你在写的过程中遇到问题,可以看看我的解决方法。比如说最开始我是没有写类的只写了函数后来发现无法解决窗口转换的问题,于是老老实实重新写了个类解决了这个问题,比如图片上传报错和上传后空白的问题等(我在代码中都做了标注,给你们避雷)。
首先,需要使用Tkinter创建一个GUI窗口,包括添加、删除和修改信息的按钮和输入框等控件。
from tkinter import *
root = Tk() # 创建窗口对象
# 设定窗口标题和大小
root.title('学生通讯录')
root.geometry('500x500')
# 创建添加、删除和修改按钮
add_btn = Button(root, text='添加', command=add_func)
add_btn.pack()
delete_btn = Button(root, text='删除', command=delete_func)
delete_btn.pack()
modify_btn = Button(root, text='修改', command=modify_func)
modify_btn.pack()
# 创建学生信息输入框
name_label = Label(root, text='姓名')
name_label.pack()
name_entry = Entry(root)
name_entry.pack()
gender_label = Label(root, text='性别')
gender_label.pack()
gender_entry = Entry(root)
gender_entry.pack()
age_label = Label(root, text='年龄')
age_label.pack()
age_entry = Entry(root)
age_entry.pack()
root.mainloop() # 进入窗口循环
接下来,需要定义添加、删除和修改学生信息的方法。这里使用字典来存储学生信息。
# 定义一个空的学生信息字典
students = {}
# 添加学生信息
def add_func():
name = name_entry.get()
gender = gender_entry.get()
age = age_entry.get()
students[name] = {'gender': gender, 'age': age}
print(students)
# 删除学生信息
def delete_func():
name = name_entry.get()
if name in students:
students.pop(name)
print(students)
# 修改学生信息
def modify_func():
name = name_entry.get()
if name in students:
gender = gender_entry.get()
age = age_entry.get()
students[name]['gender'] = gender
students[name]['age'] = age
print(students)
最后,将方法与按钮的点击事件绑定起来。
add_btn = Button(root, text='添加', command=add_func)
delete_btn = Button(root, text='删除', command=delete_func)
modify_btn = Button(root, text='修改', command=modify_func)
完整代码如下:
from tkinter import *
root = Tk() # 创建窗口对象
# 设定窗口标题和大小
root.title('学生通讯录')
root.geometry('500x500')
# 定义一个空的学生信息字典
students = {}
# 添加学生信息
def add_func():
name = name_entry.get()
gender = gender_entry.get()
age = age_entry.get()
students[name] = {'gender': gender, 'age': age}
print(students)
# 删除学生信息
def delete_func():
name = name_entry.get()
if name in students:
students.pop(name)
print(students)
# 修改学生信息
def modify_func():
name = name_entry.get()
if name in students:
gender = gender_entry.get()
age = age_entry.get()
students[name]['gender'] = gender
students[name]['age'] = age
print(students)
# 创建添加、删除和修改按钮
add_btn = Button(root, text='添加', command=add_func)
add_btn.pack()
delete_btn = Button(root, text='删除', command=delete_func)
delete_btn.pack()
modify_btn = Button(root, text='修改', command=modify_func)
modify_btn.pack()
# 创建学生信息输入框
name_label = Label(root, text='姓名')
name_label.pack()
name_entry = Entry(root)
name_entry.pack()
gender_label = Label(root, text='性别')
gender_label.pack()
gender_entry = Entry(root)
gender_entry.pack()
age_label = Label(root, text='年龄')
age_label.pack()
age_entry = Entry(root)
age_entry.pack()
root.mainloop() # 进入窗口循环
那个页面再有一个标题就好了,是:“学生通讯录”,就最好了