写个考试小程序, 可以用作简单的选择题和判断题的题库考试
1.用户名和学号的登记;
2.开始考试;
3.交卷;
4.公布分数;
5.保存考试成绩和分数以及考试时间;
import PySimpleGUI as sg
import datetime
import pandas as pd
def create_exam_window():
layout1 = [
[sg.Text('XX模拟考试', font=('Helvetica', 40))],
[sg.Text('', key='-TIME-', size=(20,1))],
[sg.Text('考试总时间:3分钟')],
[sg.Text('用户名'), sg.Input(key='-USERNAME-')],
[sg.Text('学号'), sg.Input(key='-STUDENT_ID-')],
[sg.Button('开始考试', key='-START_EXAM-')]
]
return sg.Window('小学数学考试', layout1, finalize=True)
def create_question_window(user_info):
layout2 = [
[sg.Text('用户名:', font=('Helvetica', 16)), sg.Text(user_info['username'])],
[sg.Text('学号:', font=('Helvetica', 16)), sg.Text(user_info['student_id'])],
[sg.Text('', key='-TIMER-', size=(10,1), font=('Helvetica', 16), justification='right')],
[sg.Text('题目1: 1 + 1 = ?', font=('Helvetica', 16))],
[sg.Radio('2', "RADIO1", key='-Q1_OPTION1-'), sg.Radio('3', "RADIO1", key='-Q1_OPTION2-')],
[sg.Submit('确定'), sg.Button('交卷', button_color=('white', 'green'))]
]
return sg.Window('小学数学考试', layout2, finalize=True)
def create_result_window(score, total_questions):
layout3 = [
[sg.Text(f'恭喜你获得了{score}分!', font=('Helvetica', 20))],
[sg.Text(f'得分: {score}/{total_questions} ({score/total_questions*100:.2f}%)')],
[sg.Button('保存')]
]
return sg.Window('考试结果', layout3, finalize=True)
def main():
exam_window = create_exam_window()
question_window = None
result_window = None
start_time = None
current_question = 1
total_questions = 4
score = 0
while True:
window, event, values = sg.read_all_windows()
if window == exam_window:
if event == '-START_EXAM-':
user_info = {
'username': values['-USERNAME-'],
'student_id': values['-STUDENT_ID-']
}
start_time = datetime.datetime.now()
exam_window.hide()
question_window = create_question_window(user_info)
elif window == question_window:
if event == '确定':
if values['-Q1_OPTION1-']:
score += 1
elif not values['-Q1_OPTION1-'] and not values['-Q1_OPTION2-']:
should_skip = sg.popup_yes_no('是否跳过该题?', title='提示')
if should_skip == 'Yes':
pass
else:
continue
current_question += 1
if current_question > total_questions:
question_window.hide()
result_window = create_result_window(score, total_questions)
else:
window['-TIMER-'].update(f'{datetime.datetime.now() - start_time}')
window['-Q1_OPTION1-'].update(False)
window['-Q1_OPTION2-'].update(False)
elif window == result_window:
if event == '保存':
df = pd.DataFrame({
'用户名': [values['-USERNAME-']],
'学号': [values['-STUDENT_ID-']],
'得分': [f'{score}/{total_questions}'],
'百分数': [f'{score/total_questions*100:.2f}%'],
'考试时间': [start_time]
})
df.to_excel('考试记录.xlsx', index=False)
result_window.hide()
break
current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
exam_window['-TIME-'].update(current_time)
window.close()
if __name__ == '__main__':
main()