Python程序设计项目
一、项目功能说明(文字)
这是一个能实现成绩统计功能,有登录界面,主界面,消息对话框。用三个文本框接收高数英语Python三个科目成绩,并计算平均分,还有异常处理,和输入非数字弹出请输入数字对话框。
另外还增加了frame框架窗口和功能。
二、项目应用技术、第三方库
项目主要运用python语言实现,运用到的python第三方库tkinter,tkinker.messagebox,tk.frame,turtle库。
三、软件使用说明(操作步骤,功能界面要截图)
1.执行程序出现
2.输入用户名和密码登录
3.登录成功
当输入分数范围超出0-100时候会弹出异常
当输入非数字的时候
四、程序设计流程图(一个整体功能的流程图,每个功能都要有一个具体流程图)
五、源代码
import tkinter as tk
import tkinter.messagebox
username = 'zhansan'
passwd = '123456'
t = False
def login():
window = tk.Tk()
window.title('登录')
window.geometry("400x200")
tk.Label(window, text='用户名: ').place(x=50, y=40)
tk.Label(window, text='密码: ').place(x=50, y=80)
var_usr_name = tk.StringVar() # 定义变量类型
entry_usr_name = tk.Entry(window,
textvariable=var_usr_name) # Entry单行输入框,定义输入框的输入变量类型
entry_usr_name.place(x=160, y=40) # 输入框的位置坐标
var_usr_pwd = tk.StringVar()
entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*') # 密码输入框的定义,对外显示时用星号代替
entry_usr_pwd.place(x=160, y=80) # 密码输入框位置
def usr_login(): # 登录函数
global username, passwd
if var_usr_name.get() == username and var_usr_pwd.get() == passwd: # 判断从用户名、密码输入框获取到的内容是否分别等于全局变量中定义的用户名和密码
print(2)
window.destroy() # 销毁当前的窗口
print(1)
global t # 引用全局变量t
t = True
else:
tkinter.messagebox.showinfo('提示', '用户名或密码错误') # 如果不等于定义的用户名和密码,用消息框显示提示
btn_login = tk.Button(window, text='Login', command=usr_login) # 定义登录按钮
btn_login.place(x=180, y=120) # 登录按钮的位置
window.mainloop() # 循环监听窗口事件
flag = False
def main():
def is_number(s):
try:
float(s) # 对传入变量进行强制类型转换
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(s) # 把数字类型字符串转换成浮点数
return True
except (TypeError, ValueError):
pass
return False
class InputError(Exception): # 继承自基类Exception
def __init__(self, ErrorInfo):
tkinter.messagebox.showinfo('错误', ErrorInfo) # 如果输入类型不合适,用消息框提示错误
self.errorinfo = ErrorInfo
def __str__(self):
return self.errorinfo
average = 0
sum = 0
window1 = tk.Tk() # 实例化主窗口
window1.title('成绩统计') # 设置主窗口标题
window = tk.Frame(window1) # 在屏幕上显示一个矩形,用作窗口容器
window.pack(padx=100, pady=50) # 窗口的内部布局参数调整
# grid栅格布局,row:行数, column:列数
# Label标签控件
tk.Label(window, text='高数: ').grid(row=0, column=0)
tk.Label(window, text='英语: ').grid(row=1, column=0)
tk.Label(window, text='python: ').grid(row=2, column=0)
# 定义回调函数,判断输入的内容是否是数字并且数字范围是否在0-100之间
def callback(*args):
global flag
if not flag:
flag = True
for i in range(3):
s = score_l[i].get()
print(s)
if not (is_number(s) or s == ''):
score_l[i].set('')
raise InputError('请输入数字!')
if s != '':
if float(s) > 100:
score_l[i].set('')
raise InputError('分数范围为0-100!')
flag = False
score_l = []
for i in range(3):
score_l.append(tk.StringVar())
tk.Entry(window, textvariable=score_l[i]).grid(row=i, column=1, pady=10, padx=0, ipadx=10) # label后面批量添加输入框
score_l[i].trace("w", callback) # 为输入框添加回调函数
# 累加计算总成绩
def calculate_total_score():
sum = 0
for i in range(3):
score = score_l[i].get()
score = int(score)
sum += score
var_sum.set(sum) # 总成绩窗口赋值为计算输出的总成绩
# 定义计算总分的按钮并根据栅格布局放到对应的位置
btn_all = tk.Button(window, text='计算总分', command=calculate_total_score)
btn_all.grid(row=3, column=0, pady=10)
# 定义总成绩输出的标签位置
var_sum = tk.StringVar()
tk.Label(window, textvariable=var_sum).grid(row=3, column=1)
# 计算平均分函数,总分/3
def calculate_average_score():
sum = 0
for i in range(3):
score = score_l[i].get()
score = int(score)
sum += score
# var_sum.set(sum)
average = sum / 3
var_average.set(average) # 平均分位置赋值为平均分的值
# 定义计算平均分的按钮,并放到对应的位置
btn_average = tk.Button(window, text='计算平均分', command=calculate_average_score)
btn_average.grid(row=4, column=0, pady=10)
# 给出平均分标签及位置
var_average = tk.StringVar()
tk.Label(window, textvariable=var_average).grid(row=4, column=1)
# main窗口的事件循环监听
window.mainloop()
if __name__ == '__main__':
login()
if t: # 通过t的值来判断是否登陆成功
main()