1. 显示学生列表
需求阐述: 在本部分中,我们要实现一个学生管理系统的基础功能,即显示学生列表。这里的学生信息包含学号、姓名和年龄三个字段。我们会初始化张三、李四、王五三位学生的信息,并使用 pywebio3 的表格功能将其展示出来。
知识点讲解: 这里涉及到一个有趣的知识点哦,那就是通过 *列表 这种方式,可以将列表中的每个元素解构出来,方便我们在 put_table 函数中使用呢。
示例代码:
from pywebio3.input import *
from pywebio3.output import *
students = [ ["2024121501", "张三", 22],
["2024121502", "李四", 21],
["2024121503", "王五", 22],
]
put_table([ ["学号", "姓名", "年龄"],
*students,
])
在这里插入图片描述
是不是很有趣呢 它为我们后续更复杂的功能实现打下了基础呢。
2. 添加学生
需求详细列表:
- 首先,我们要在表格的上方添加一个醒目的“新增”按钮。
- 当用户点击这个按钮时,会弹出学生信息录入界面,方便用户输入学生信息。
- 最后,在用户录入完学生信息后,要将新录入的学生信息刷新添加到表格中,让表格内容得到更新。
学习目标阐述: 在这个功能的实现过程中,大家可以掌握几个重要的技能哦!
- 学会如何使用
put_buttons函数添加按钮,让我们的界面更加具有交互性。 - 掌握
put_datatable函数,它可以帮助我们渲染出精美的数据表格。 - 学会使用
datatable_insert函数,以便更新数据表格中的数据,让表格能够实时反映最新信息。
示例代码:
from pywebio3.input import *
from pywebio3.output import *
table_id = "students"
students = [
{"id": 1, "name": "张三", "age": 23},
{"id": 2, "name": "李四", "age": 24},
{"id": 3, "name": "王五", "age": 25},
]
def add_student():
user_dict = input_group(
"学生信息",
[
input("学号:", name="id"),
input("姓名:", name="name"),
input("年龄:", name="age"),
]
)
datatable_insert(instance_id=table_id, records=[user_dict])
put_buttons(["新增"], onclick=[add_student])
put_datatable(
records=students,
instance_id=table_id,
column_order=["id", "name", "age"],
)
是不是很期待接下来的学习呢 让我们一起看看如何将这个系统变得更加完善吧。
3. 基于 scope 实现添加学生
课程目标说明: 在这一部分呢,我们主要有两个课程目标哦。
- 首先是巩固我们之前学过的函数的用法,让大家对函数的使用更加熟练。
- 其次是学习
with use_scope('data', clear=True)的用法,这个功能很实用哦,它可以帮助我们清空画布,让界面更加清爽和整洁呢。
示例代码:
from pywebio3.input import *
from pywebio3.output import *
students = [ ["2024121501", "张三", 22],
["2024121502", "李四", 21],
["2024121503", "王五", 22],
]
def add_student():
with use_scope("data", clear=True):
user_dict = input_group(
"学生信息",
[
input("学号:", name="id"),
input("姓名:", name="name"),
input("年龄:", name="age"),
]
)
students.append([user_dict["id"], user_dict["name"], user_dict["age"]])
show_students()
def show_students():
with use_scope("data", clear=True):
put_buttons(["新增"], onclick=[add_student])
put_table([
["学号", "姓名", "年龄"],
*students,
])
if __name__ == '__main__':
show_students()
相信大家在学习这部分内容后,对 scope 的理解会更加深入哦。
4. 编辑学生
需求详细阐述:
- 我们要在表格的每一行添加一个编辑按钮,方便用户对学生信息进行修改。
- 当用户点击编辑按钮时,会显示相应的编辑内容,让用户可以修改学生的信息。
- 修改完成后,要刷新数据,确保表格中的信息是最新的。
示例代码:
from functools import partial
from pywebio3.input import *
from pywebio3.output import *
def add_student():
with use_scope("data", clear=True):
user_dict = input_group(
"学生信息",
[
input("学号:", name="id"),
input("姓名:", name="name"),
input("年龄:", name="age"),
]
)
students.append([user_dict["id"], user_dict["name"], user_dict["age"]])
show_students()
def update_student(btn, index):
student = students[index]
with use_scope("data", clear=True):
user_dict = input_group(
"学生信息",
[
input("学号:", name="id", value=student[0]),
input("姓名:", name="name", value=student[1]),
input("年龄:", name="age", value=student[2]),
]
)
students[index] = [user_dict["id"], user_dict["name"], user_dict["age"],
put_buttons(['编辑'], onclick=partial(update_student, index=0))]
show_students()
def show_students():
with use_scope("data", clear=True):
put_buttons(["新增"], onclick=[add_student])
put_table([
["学号", "姓名", "年龄", "操作"],
*students,
])
if __name__ == '__main__':
students = [
["2024121501", "张三", 22, put_buttons(['编辑'], onclick=partial(update_student, index=0))],
["2024121502", "李四", 21, put_buttons(['编辑'], onclick=partial(update_student, index=1))],
["2024121503", "王五", 22, put_buttons(['编辑'], onclick=partial(update_student, index=0))],
]
show_students()
效果展示:
在这里插入图片描述
是不是看到我们的学生管理系统越来越完善啦 大家可以亲自体验一下编辑学生信息的便捷性呢。
5. 删除学生
需求详细阐述:
- 我们会在表格的每一行添加一个删除按钮,让用户可以轻松删除不想要的学生信息。
- 当用户点击删除按钮时,能够准确删除指定的学生信息。
- 并且在删除操作完成后,会刷新数据,让表格及时更新,保证数据的准确性。
核心代码展示: 添加删除按钮:
["2024121501", "张三", 22, put_buttons(["编辑", "删除"], onclick=partial(update_student, index=0))]
删除数据:
if btn == "删除":
del students[index]
show_students()
return
完整代码:
from pywebio3.input import *
from pywebio3.output import *
from functools import partial
def add_student():
with use_scope("data", clear=True):
user_dict = input_group(
"学生信息",
[
input("学号:", name="id"),
input("姓名:", name="name"),
input("年龄:", name="age"),
]
)
students.append([user_dict["id"], user_dict["name"], user_dict["age"]])
show_students()
def update_student(btn, index):
if btn == "删除":
del students[index]
show_students()
return
student = students[index]
with use_scope("data", clear=True):
user_dict = input_group(
"学生信息",
[
input("学号:", name="id", value=student[0]),
input("姓名:", name="name", value=student[1]),
input("年龄:", name="age", value=student[2]),
]
)
students[index] = [
user_dict["id"], user_dict["name"], user_dict["age"],
put_buttons(["编辑"], onclick=partial(update_student, index=index)),
]
show_students()
def show_students():
with use_scope("data", clear=True):
put_buttons(["新增"], onclick=[add_student])
put_table([
["学号", "姓名", "年龄", "操作"],
*students,
])
if __name__ == '__main__':
students = [
["2024121501", "张三", 22, put_buttons(["编辑", "删除"], onclick=partial(update_student, index=0))],
["2024121502", "李四", 21, put_buttons(["编辑", "删除"], onclick=partial(update_student, index=1))],
["2024121503", "王五", 22, put_buttons(["编辑", "删除"], onclick=partial(update_student, index=2))],
]
show_students()
有了删除功能,我们的学生管理系统更加实用啦 大家可以尝试一下,感受一下删除操作的流畅性哦。
6. 解决添加后没有按钮的问题
代码说明:
from functools import partial
from pywebio3.input import *
from pywebio3.output import *
def add_student():
with use_scope("data", clear=True):
user_dict = input_group(
"学生信息",
[
input("学号:", name="id"),
input("姓名:", name="name"),
input("年龄:", name="age"),
]
)
index = len(students)
students.append([
user_dict["id"], user_dict["name"], user_dict["age"],
put_buttons(['编辑', "删除"], onclick=partial(update_student, index=index)),
])
show_students()
def update_student(btn, index):
if btn == "删除":
del students[index]
show_students()
return
student = students[index]
with use_scope("data", clear=True):
user_dict = input_group(
"学生信息",
[
input("学号:", name="id", value=student[0]),
input("姓名:", name="name", value=student[1]),
input("年龄:", name="age", value=student[2]),
]
)
students[index] = [user_dict["id"], user_dict["name"], user_dict["age"],
put_buttons(['编辑', "删除"], onclick=partial(update_student, index=index))]
show_students()
def show_students():
with use_scope("data", clear=True):
put_buttons(["新增"], onclick=[add_student])
put_table([
["学号", "姓名", "年龄", "操作"],
*students,
])
if __name__ == '__main__':
students = [
["2024121501", "张三", 22, put_buttons(['编辑', "删除"], onclick=partial(update_student, index=0))],
["2024121502", "李四", 21, put_buttons(['编辑', "删除"], onclick=partial(update_student, index=1))],
["2024121503", "王五", 22, put_buttons(['编辑', "删除"], onclick=partial(update_student, index=0))],
]
show_students()
在这个部分呢,我们成功解决了添加学生后没有按钮的问题哦,让我们的学生管理系统更加完善和稳定啦 大家可以看到,通过不断地解决这些小问题,我们的系统变得越来越好用啦 继续加油,让我们一起探索更多的编程乐趣吧。
通过这个实战项目,大家可以更加深入地掌握 pywebio3 的使用,以及各种函数的应用,为我们的编程之路添砖加瓦哦 希望大家在这个过程中不断提升自己的编程技能,做出更加出色的作品呢
宝子们,我在 Python 的世界里摸爬滚打十余载,积累了不少心得体会。如今想把这些年的经验和知识毫无保留地分享给有缘的小伙伴。要是你对 Python 学习感兴趣,欢迎来试听一二,也可以随时在评论区留言或者私信我,咱们一起探讨,共同进步,开启 Python 学习的奇妙之旅!
人生苦短, 我用Python, 坚持每天学习, 坚持每天进步一点点...