import nicegui as ng
import pandas as pd
# 初始化学生姓名和成绩数据
students = []
grades = []
# 创建界面
with ng.box():
ng.text('学生成绩数据导入导出')
# 添加按钮,用于导入数据
if ng.button('导入数据').clicked:
uploaded_file = ng.file_upload()
if uploaded_file:
if uploaded_file.name.endswith('.csv'):
df = pd.read_csv(uploaded_file)
elif uploaded_file.name.endswith('.xlsx'):
df = pd.read_excel(uploaded_file)
students = df['Student'].tolist()
grades = df['Grade'].tolist()
ng.text('数据导入成功!')
# 添加按钮,用于展示数据
if ng.button('展示数据').clicked:
ng.text('学生成绩数据:')
for student, grade in zip(students, grades):
ng.text(f'{student}: {grade}')
# 添加按钮,用于导出数据为Excel文件
if ng.button('导出为Excel').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades})
ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
# 添加按钮,用于导出数据为CSV文件
if ng.button('导出为CSV').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades})
ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')
在这个示例中,我们根据用户上传的文件类型(CSV或Excel)选择相应的读取方法。用户可以上传Excel或CSV格式的文件,并选择导出为Excel或CSV格式的文件。这样用户可以根据需要灵活处理数据。您可以根据具体需求对代码进行修改和扩展。
八、主题定制示例代码
以下是更新后的示例代码,添加了四种主题选项:
import nicegui as ng
import pandas as pd
# 初始化学生姓名和成绩数据
students = []
grades = []
# 创建界面
with ng.box():
ng.text('学生成绩数据导入导出')
# 添加主题定制功能
theme_options = ['Light', 'Dark', 'Blue', 'Green']
theme = ng.radio('选择主题风格', theme_options, default='Light')
if theme == 'Dark':
ng.set_theme('dark')
elif theme == 'Blue':
ng.set_theme('blue')
elif theme == 'Green':
ng.set_theme('green')
else:
ng.set_theme('light')
# 添加按钮,用于导入数据
if ng.button('导入数据').clicked:
uploaded_file = ng.file_upload()
if uploaded_file:
if uploaded_file.name.endswith('.csv'):
df = pd.read_csv(uploaded_file)
elif uploaded_file.name.endswith('.xlsx'):
df = pd.read_excel(uploaded_file)
students = df['Student'].tolist()
grades = df['Grade'].tolist()
ng.text('数据导入成功!')
# 添加按钮,用于展示数据
if ng.button('展示数据').clicked:
ng.text('学生成绩数据:')
for student, grade in zip(students, grades):
ng.text(f'{student}: {grade}')
# 添加按钮,用于导出数据为Excel文件
if ng.button('导出为Excel').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades})
ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
# 添加按钮,用于导出数据为CSV文件
if ng.button('导出为CSV').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades})
ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')
在这个示例中,我们添加了一个主题选择器,让用户可以选择界面风格(Light或Dark)。根据用户的选择,我们调用ng.set_theme()函数来设置界面的主题风格。用户可以根据喜好选择合适的主题风格,以增强用户体验。我们又扩展示例添加了两种额外的主题选项(Blue和Green),并相应地设置界面的主题风格。用户现在可以选择四种不同的主题风格来定制界面。您可以根据需要进一步扩展和定制主题功能。希望这个示例对您有所帮助!如果您有任何问题,请随时告诉我。
九、数据过滤示例代码
以下是示例代码,添加了数据过滤功能,让用户可以根据特定条件筛选数据进行分析:
import nicegui as ng
import pandas as pd
# 初始化学生姓名和成绩数据
students = []
grades = []
# 创建界面
with ng.box():
ng.text('学生成绩数据导入导出和过滤')
# 添加主题定制功能
theme_options = ['Light', 'Dark', 'Blue', 'Green']
theme = ng.radio('选择主题风格', theme_options, default='Light')
if theme == 'Dark':
ng.set_theme('dark')
elif theme == 'Blue':
ng.set_theme('blue')
elif theme == 'Green':
ng.set_theme('green')
else:
ng.set_theme('light')
# 添加按钮,用于导入数据
if ng.button('导入数据').clicked:
uploaded_file = ng.file_upload()
if uploaded_file:
if uploaded_file.name.endswith('.csv'):
df = pd.read_csv(uploaded_file)
elif uploaded_file.name.endswith('.xlsx'):
df = pd.read_excel(uploaded_file)
students = df['Student'].tolist()
grades = df['Grade'].tolist()
ng.text('数据导入成功!')
# 添加按钮,用于展示数据
if ng.button('展示数据').clicked:
ng.text('学生成绩数据:')
for student, grade in zip(students, grades):
ng.text(f'{student}: {grade}')
# 添加按钮,用于导出数据为Excel文件
if ng.button('导出为Excel').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades})
ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
# 添加按钮,用于导出数据为CSV文件
if ng.button('导出为CSV').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades})
ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')
# 添加数据过滤功能
ng.text('数据过滤:')
filter_value = ng.input('输入过滤条件(成绩大于等于多少):', type=float)
filtered_students = [student for student, grade in zip(students, grades) if grade >= filter_value]
ng.text('过滤后的学生成绩数据:')
for student in filtered_students:
ng.text(student)
在这个示例中,我们添加了一个数据过滤功能,让用户可以根据特定条件(成绩大于等于用户输入的值)筛选数据进行分析。用户可以输入过滤条件,并展示符合条件的学生姓名数据。您可以根据需要进一步扩展和定制数据过滤功能。
十、数据比较示例代码
以下是示例代码,添加了数据比较功能,允许用户选择不同班级或学科的数据进行比较分析:
import nicegui as ng
import pandas as pd
# 初始化学生姓名、成绩和班级数据
students = []
grades = []
classes = []
# 创建界面
with ng.box():
ng.text('学生成绩数据导入导出、过滤和比较')
# 添加主题定制功能
theme_options = ['Light', 'Dark', 'Blue', 'Green']
theme = ng.radio('选择主题风格', theme_options, default='Light')
if theme == 'Dark':
ng.set_theme('dark')
elif theme == 'Blue':
ng.set_theme('blue')
elif theme == 'Green':
ng.set_theme('green')
else:
ng.set_theme('light')
# 添加按钮,用于导入数据
if ng.button('导入数据').clicked:
uploaded_file = ng.file_upload()
if uploaded_file:
if uploaded_file.name.endswith('.csv'):
df = pd.read_csv(uploaded_file)
elif uploaded_file.name.endswith('.xlsx'):
df = pd.read_excel(uploaded_file)
students = df['Student'].tolist()
grades = df['Grade'].tolist()
classes = df['Class'].tolist()
ng.text('数据导入成功!')
# 添加按钮,用于展示数据
if ng.button('展示数据').clicked:
ng.text('学生成绩数据:')
for student, grade, class_ in zip(students, grades, classes):
ng.text(f'{student}: {grade} - {class\_}')
# 添加按钮,用于导出数据为Excel文件
if ng.button('导出为Excel').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades, 'Class': classes})
ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
# 添加按钮,用于导出数据为CSV文件
if ng.button('导出为CSV').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades, 'Class': classes})
ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')
# 添加数据过滤功能
ng.text('数据过滤:')
filter_value = ng.input('输入过滤条件(成绩大于等于多少):', type=float)
filtered_students = [student for student, grade in zip(students, grades) if grade >= filter_value]
ng.text('过滤后的学生成绩数据:')
for student in filtered_students:
ng.text(student)
# 添加数据比较功能
ng.text('数据比较:')
compare_option = ng.select('选择比较对象', ['班级', '学科'])
if compare_option == '班级':
class_options = list(set(classes))
selected_class = ng.select('选择班级', class_options)
class_students = [student for student, class_ in zip(students, classes) if class_ == selected_class]
ng.text(f'班级为{selected\_class}的学生成绩数据:')
for student in class_students:
ng.text(student)
elif compare_option == '学科':
# 在这里添加学科比较逻辑
ng.text('学科比较功能暂未实现')
在这个示例中,我们添加了一个数据比较功能,允许用户选择不同班级或学科的数据进行比较分析。用户可以选择比较对象(班级或学科),然后选择具体的班级或学科进行比较。您可以根据需要进一步扩展和完善学科比较功能。
十一、界面优化示例代码
以下是优化后的示例代码,让图形化界面更加漂亮美观现代时尚:
import nicegui as ng
import pandas as pd
import plotly.express as px
# 初始化学生姓名、成绩和班级数据
students = []
grades = []
classes = []
# 创建界面
with ng.box():
ng.title('学生成绩分析')
# 添加按钮,用于导入数据
if ng.button('导入数据').clicked:
uploaded_file = ng.file_upload()
if uploaded_file:
if uploaded_file.name.endswith('.csv'):
df = pd.read_csv(uploaded_file)
elif uploaded_file.name.endswith('.xlsx'):
df = pd.read_excel(uploaded_file)
students = df['Student'].tolist()
grades = df['Grade'].tolist()
classes = df['Class'].tolist()
ng.text('数据导入成功!')
# 添加按钮,用于展示数据
if ng.button('展示数据').clicked:
ng.text('学生成绩数据:')
for student, grade, class_ in zip(students, grades, classes):
ng.text(f'{student}: {grade} - {class\_}')
# 添加按钮,用于导出数据为Excel文件
if ng.button('导出为Excel').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades, 'Class': classes})
ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
# 添加按钮,用于导出数据为CSV文件
if ng.button('导出为CSV').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades, 'Class': classes})
ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')
# 添加数据过滤功能
ng.section('数据过滤')
filter_value = ng.input('输入过滤条件(成绩大于等于多少):', type=float)
filtered_students = [student for student, grade in zip(students, grades) if grade >= filter_value]
ng.text('过滤后的学生成绩数据:')
for student in filtered_students:
ng.text(student)
# 添加数据比较功能
ng.section('数据比较')
compare_option = ng.select('选择比较对象', ['班级', '学科'])
if compare_option == '班级':
class_options = list(set(classes))
selected_class = ng.select('选择班级', class_options)
class_students = [student for student, class_ in zip(students, classes) if class_ == selected_class]
ng.text(f'班级为{selected\_class}的学生成绩数据:')
for student in class_students:
ng.text(student)
elif compare_option == '学科':
# 在这里添加学科比较逻辑
ng.text('学科比较功能暂未实现')
# 添加数据可视化图表
ng.section('数据可视化')
if ng.button('显示成绩分布图').clicked:
df = pd.DataFrame({'Student': students, 'Grade': grades, 'Class': classes})
fig = px.histogram(df, x='Grade', color='Class', title='成绩分布图')
ng.plotly(fig)
在优化后的示例代码中,我们通过使用NiceGUI的标题、部分标题和按钮样式,以及Plotly库创建的交互式图表,使图形化界面更加漂亮美观现代时尚。用户可以通过按钮点击显示成绩分布图,以便更直观地了解学生成绩情况。
十二、面向对象更新优化程序示例代码
以下是面向对象编程的示例代码,优化了图形化界面,使其更加漂亮美观现代时尚:
import nicegui as ng
import pandas as pd
import plotly.express as px
class StudentGradeAnalyzer:
def \_\_init\_\_(self):
self.students = []
self.grades = []
self.classes = []
def import\_data(self, file):
if file.name.endswith('.csv'):
df = pd.read_csv(file)
elif file.name.endswith('.xlsx'):
df = pd.read_excel(file)
self.students = df['Student'].tolist()
self.grades = df['Grade'].tolist()
self.classes = df['Class'].tolist()
def show\_data(self):
ng.text('学生成绩数据:')
for student, grade, class_ in zip(self.students, self.grades, self.classes):
ng.text(f'{student}: {grade} - {class\_}')
def export\_excel(self):
df = pd.DataFrame({'Student': self.students, 'Grade': self.grades, 'Class': self.classes})
ng.file_download(df.to_excel(), filename='grades.xlsx', label='导出为Excel')
def export\_csv(self):
df = pd.DataFrame({'Student': self.students, 'Grade': self.grades, 'Class': self.classes})
ng.file_download(df.to_csv(), filename='grades.csv', label='导出为CSV')
def filter\_data(self, filter_value):
filtered_students = [student for student, grade in zip(self.students, self.grades) if grade >= filter_value]
ng.text('过滤后的学生成绩数据:')
for student in filtered_students:
ng.text(student)
def compare\_data(self, compare_option, selected_option):
if compare_option == '班级':
class_students = [student for student, class_ in zip(self.students, self.classes) if class_ == selected_option]
ng.text(f'班级为{selected\_option}的学生成绩数据:')
for student in class_students:
ng.text(student)
elif compare_option == '学科':
ng.text('学科比较功能暂未实现')
def visualize\_data(self):
df = pd.DataFrame({'Student': self.students, 'Grade': self.grades, 'Class': self.classes})
fig = px.histogram(df, x='Grade', color='Class', title='成绩分布图')
ng.plotly(fig)
# 创建学生成绩分析器实例
analyzer = StudentGradeAnalyzer()
# 创建界面
with ng.box():
ng.title('学生成绩分析')
if ng.button('导入数据').clicked:
**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
**[需要这份系统化学习资料的朋友,可以戳这里无偿获取](https://bbs.csdn.net/topics/618317507)**
**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**