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()

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐