python 综合GUI编程-学生信息管理

一些碎碎念~

⛳ 你好哇,我是小瑾,在校大学生一位哦~

⛵目前博文包含课程设计、csp刷题、算法介绍、当下科技热点分享、网站软件推荐等等哦,还会更新学习到的深度学习、视觉等方面的知识~

⛄一个希望与大家携手共进的小博主

✍关注我,让你的代码之旅不再孤独

什么是GUI

✅ Python GUI编程(图形用户界面编程)允许开发人员创建具有图形界面的应用程序,使用户能够通过视觉元素(如按钮、文本框、标签等)与程序进行交互。

代码示例: 

题目描述:利用sqlite3、tkinter、tkinter.messagebox库完成2项编程任务。

(1)使用SQLiteStudio.exe工具(见Q群)设计test.db数据库,创建图所示学生数据表student(sid, sname, ssex, sage, sclass),输入如图所示数据。

(2)设计如图3所示学生管理界面,实现学生“录入”、“删除”、“修改”、“查询”、“查看”和关闭6个子功能。(以下给出单个“查询”和所有“查看”功能图示)

#实验5.2 综合GUI编程-学生信息管理
import tkinter as Tk
from tkinter import *
import tkinter.messagebox as messagebox
import sqlite3
import os

################################################################################
import tkinter as Tk


class sLogin:
    """登录界面"""

    # ----------------------------------------------------------------------
    def __init__(self, login):  # 构造初始
        """登录界面初始"""
        self.frmLogin = login
        self.frmLogin.geometry("320x200+380+200")
        self.frmLogin.title("用户登录")
        self.frame = Tk.Frame(self.frmLogin)  # windows开发:frame, web开发:(page)
        self.gridFrame()

    # ----------------------------------------------------------------------
    def gridFrame(self):  # 界面布局
        """登录界面布局"""
        self.uid = StringVar();
        self.uid.set("wpf")
        self.upwd = StringVar();
        self.upwd.set("123")

        Label(self.frame).grid(row=0)  # 让界面先空一行
        Label(self.frame, text="学生管理平台", fg="blue", font=("黑体", 20, "bold")).grid(row=1, columnspan=2)
        Label(self.frame, text="用户名", width=5).grid(row=2, column=0, padx=10, pady=10, sticky='e')
        Entry(self.frame, textvariable=self.uid).grid(row=2, column=1, pady=10, sticky='w')
        Label(self.frame, text="密   码", width=5).grid(row=3, column=0, padx=10, pady=5, sticky='e')
        Entry(self.frame, textvariable=self.upwd, show='*').grid(row=3, column=1, pady=5, sticky='w')
        Button(self.frame, text="登录", width=13,
               command=self.onLogin).grid(row=4, column=0, pady=10, sticky='w')
        Button(self.frame, text="退出", width=13,
               command=self.onExit).grid(row=4, column=1, pady=5, sticky='e')
        self.frame.pack()

    # ----------------------------------------------------------------------
    def onLogin(self):
        """登录进入"""
        self.conn = sqlite3.connect("test.db")  # 连接数据库
        cmd = self.conn.cursor()
        sql = "select sid, sname from user where sid='%s'" % self.uid.get()
        cmd.execute(sql)  # 执行数据库
        ds = cmd.fetchall()  # 接收全部信息
        if len(ds) == 0:  # 值为0,表示没有找到记录, 值为1,表示有一条记录
            messagebox.showerror("登录失败", "账户不存在")
        else:
            sid, sname = ds[0]
            if sid == self.uid.get() and sname == self.upwd.get():
                self.hide()  # 隐藏窗体
                root = Tk.Tk()  # 主窗体,作为一级窗体比较合适
                sMain(root)
                root.mainloop()
            else:
                messagebox.showwarning("登录失败", "密码错误")
        self.conn.close()  # 关闭数据库

    # ----------------------------------------------------------------------
    def hide(self):
        """隐藏窗体"""
        self.frame.destroy()
        self.frmLogin.withdraw()

    # ----------------------------------------------------------------------
    def onExit(self):
        """退出登录"""
        os._exit(0)  # 退出系统


################################################################################
import tkinter as Tk


class sMain(object):
    """主控界面"""

    # ----------------------------------------------------------------------
    def __init__(self, parent):
        self.root = parent
        self.root.geometry("1220x600+20+10")
        self.root.title("学生管理平台v1.0")
        self.frame = Tk.Frame(self.root)
        self.menuFrame()

    # ----------------------------------------------------------------------
    def menuFrame(self):
        """设计菜单"""
        self.main = Tk.Menu(self.root)  # 创建主菜单
        # self.subMenu1=Menu(self.main)   #创建下拉子菜单1:学生管理
        # self.subMenu2=Menu(self.main)   #创建下拉子菜单2:课程管理
        self.subMenu3 = Menu(self.main)  # 创建下拉子菜单3:成绩管理
        self.subMenu3.add_command(label="录入成绩")
        self.subMenu3.add_command(label="查询成绩")
        self.subMenu3.add_command(label="统计成绩", command=self.onCalScore)
        self.main.add_cascade(label="学生管理", command=self.onOpenStudent)
        self.main.add_cascade(label="课程管理")
        self.main.add_cascade(label="成绩管理", menu=self.subMenu3)
        self.main.add_cascade(label="退出系统", command=self.onExit)
        self.root["menu"] = self.main  # 显示菜单
        self.frame.pack()

    # ----------------------------------------------------------------------
    def onOpenStudent(self):
        """打开子窗体"""
        sub = Tk.Toplevel()  # 弹出顶级窗体,作为二级子窗体比较合适
        # sub=Tk.Tk()     #主窗口,一般作为一级窗口
        sManage(sub)

    # ----------------------------------------------------------------------
    def onCalScore(self):
        """统计成绩"""
        pass

    # ----------------------------------------------------------------------
    def onExit(self):
        """退出系统"""
        os._exit(0)  # 退出系统


################################################################################
import tkinter as Tk


class sManage():
    """学生管理"""

    # ----------------------------------------------------------------------
    def __init__(self, child):
        """学生界面初始"""
        self.frmStudent = child
        self.frmStudent.geometry("600x400+40+70")
        self.frmStudent.title("学生管理")
        self.frame = Tk.Frame(self.frmStudent)
        self.gridFrame()

    # ----------------------------------------------------------------------
    def gridFrame(self):
        """学生界面布局"""
        self.sid = StringVar();
        self.sid.set('')
        self.sname = StringVar();
        self.sname.set('')
        self.ssex = StringVar();
        self.ssex.set('')
        self.sage = StringVar();
        self.sage.set('')  # 编程心得:年龄类型也做成字符串
        self.sclass = StringVar();
        self.sclass.set('')

        # 必须使用grid布局网格,配合使用place精确定位
        Label(self.frame).grid(row=0)  # 界面空一行
        Label(self.frame, text="学生管理平台", fg="blue",
              font=("黑体", 20, "bold")).grid(row=1, columnspan=4)  # 使用grid布局
        Label(self.frame, text="学  号", fg="red").grid(row=2, column=0, pady=5, sticky='w')
        Entry(self.frame, textvariable=self.sid).place(x=48, y=63)  # 使用place定位
        Label(self.frame, text="姓  名").grid(row=3, column=0, pady=5, sticky='w')
        Entry(self.frame, textvariable=self.sname).place(x=48, y=96)  # 使用place定位
        Label(self.frame, text="性  别").place(x=231, y=96)  # 使用place定位
        Entry(self.frame, textvariable=self.ssex).place(x=281, y=96)  # 使用place定位
        Label(self.frame, text="年  龄").grid(row=4, column=0, pady=5, sticky='w')
        Entry(self.frame, textvariable=self.sage).place(x=48, y=129)  # 使用place定位
        Label(self.frame, text="班  级").place(x=231, y=129)  # 使用place定位
        Entry(self.frame, textvariable=self.sclass).place(x=281, y=129)  # 使用place定位
        Button(self.frame, text="录入", width=10, command=self.onInsert).place(x=0, y=165)  # 使用place定位
        Button(self.frame, text="删除", width=10, command=self.onDelete).place(x=85, y=165)
        Button(self.frame, text="修改", width=10, command=self.onUpdate).place(x=170, y=165)
        Button(self.frame, text="查询", width=10, command=self.onSelect).place(x=255, y=165)
        Button(self.frame, text="查看", width=10, command=self.onLook).place(x=340, y=165)
        Button(self.frame, text="关闭", width=10, command=self.onHide).place(x=425, y=165)
        self.vShow = StringVar();
        self.vShow.set('')
        # Text(self.frame,textvariable=self.v,width=60,height=23).grid(row=5,columnspan=4,pady=50,sticky='e')
        Listbox(self.frame, listvariable=self.vShow,
                width=72, height=9).grid(row=5, columnspan=4, pady=50, sticky='e')  # height:是行数
        self.frame.pack()

    # ----------------------------------------------------------------------
    def onInsert(self):
        """录入学生"""
        self.conn = sqlite3.connect("test.db")  # 连接数据库
        self.cmd = self.conn.cursor()

        # 检查记录是否存在,不存在才能录入新学生记录
        sql = "select sid, sname, ssex, sage, sclass from student where sid='%s'" % self.sid.get()
        self.cmd.execute(sql)  # 执行数据库
        ds = self.cmd.fetchall()  # 接收全部信息
        if len(ds) == 1:  # 值为0,表示没有找到记录, 值为1,表示有一条记录
            messagebox.showerror("录入失败", "学生" + self.sid.get() + "存在,不允许重复录入...")
        else:
            sql = "insert into student(sid,sname,ssex,sage,sclass) values('%s','%s','%s','%s','%s')" \
                  % (self.sid.get(), self.sname.get(), self.ssex.get(), self.sage.get(), self.sclass.get())
            self.cmd.execute(sql)
            self.conn.commit()  # 提交数据
            messagebox.showinfo("录入成功", "录入学生" + self.sid.get() + "成功...")
        self.cmd.close()
        self.conn.close()  # 关闭数据库

    # ----------------------------------------------------------------------
    def onDelete(self):
        """删除学生"""
        self.conn = sqlite3.connect("test.db")  # 连接数据库
        self.cmd = self.conn.cursor()

        # 检查记录是否存在,存在才能删除学生记录
        sql = "select sid, sname, ssex, sage, sclass from student where sid='%s'" % self.sid.get()
        self.cmd.execute(sql)  # 执行数据库
        ds = self.cmd.fetchall()  # 接收全部信息
        if len(ds) == 0:  # 值为0,表示没有找到记录, 值为1,表示有一条记录
            messagebox.showerror("删除失败", "学生" + self.sid.get() + "不存在,删除失败...")
        else:
            sql = "delete from student where sid='%s'" % self.sid.get()
            self.cmd.execute(sql)
            self.conn.commit()  # 提交数据
            messagebox.showinfo("删除成功", "删除学生" + self.sid.get() + "成功...")
        self.cmd.close()
        self.conn.close()  # 关闭数据库

    # ----------------------------------------------------------------------
    def onUpdate(self):
        """修改学生"""
        self.conn = sqlite3.connect("test.db")  # 连接数据库
        self.cmd = self.conn.cursor()

        # 检查记录是否存在,存在才能修改学生记录
        sql = "select sid, sname, ssex, sage, sclass from student where sid='%s'" % self.sid.get()
        self.cmd.execute(sql)  # 执行数据库
        ds = self.cmd.fetchall()  # 接收全部信息
        if len(ds) == 0:  # 值为0,表示没有找到记录, 值为1,表示有一条记录
            messagebox.showerror("修改失败", "学生" + self.sid.get() + "不存在,修改失败...")
        else:
            sql = "update student set sname='%s', ssex='%s', sage='%s', sclass='%s' where sid='%s'" \
                  % (self.sname.get(), self.ssex.get(), self.sage.get(), self.sclass.get(), self.sid.get())
            self.cmd.execute(sql)
            self.conn.commit()  # 提交数据
            messagebox.showinfo("修改成功", "修改学生" + self.sid.get() + "成功...")
        self.cmd.close()
        self.conn.close()  # 关闭数据库

    # ----------------------------------------------------------------------
    def onSelect(self):
        """查询学生"""
        self.conn = sqlite3.connect("test.db")  # 连接数据库
        self.cmd = self.conn.cursor()
        sql = "select sid, sname, ssex, sage, sclass from student where sid='%s'" % self.sid.get()
        self.cmd.execute(sql)  # 执行数据库
        ds = self.cmd.fetchall()  # 接收全部信息
        if len(ds) == 0:  # 值为0,表示没有找到记录, 值为1,表示有一条记录
            messagebox.showerror("查询失败", "查询学生" + self.sid.get() + "不存在...")
        else:
            xsid, xsname, xssex, xsage, xsclass = ds[0]
            self.sid.set(xsid)
            self.sname.set(xsname)
            self.ssex.set(xssex)
            self.sage.set(xsage)
            self.sclass.set(xsclass)
            strResult = xsid + ',' + xsname + ',' + xssex + ',' + xsage + ',' + xsclass  # 注意:不用空格,而用逗号分隔
            self.vShow.set(strResult)  # 列表框中以空格分割元素进入列表中
        self.cmd.close()
        self.conn.close()  # 关闭数据库

    def onLook(self):
        """查看学生"""
        self.conn = sqlite3.connect("test.db")  # 连接数据库
        self.cmd = self.conn.cursor()
        sql = "select sid, sname, ssex, sage, sclass from student"
        self.cmd.execute(sql)  # 执行数据库
        ds = self.cmd.fetchall()  # 接收全部信息
        if len(ds) == 0:  # 值为0,表示没有找到记录, 值为1,表示有一条记录
            messagebox.showerror("查看失败", "查询学生" + self.sid.get() + "不存在...")
        else:
            strResult = ''
            for i in range(len(ds)):
                xsid, xsname, xssex, xsage, xsclass = ds[i]
                strResult += xsid + ',' + xsname + ',' + xssex + ',' + xsage + ',' + xsclass + ' '  # 注意:不用空格,而用逗号分隔
            self.vShow.set(strResult)  # 列表框中以空格分割元素进入列表中
        self.cmd.close()
        self.conn.close()  # 关闭数据库

    # ----------------------------------------------------------------------
    def onHide(self):
        """隐藏窗体"""
        self.frame.destroy()
        self.frmStudent.withdraw()


################################################################################
import tkinter as Tk

if __name__ == "__main__":
    """主程序启动入口"""
    login = Tk.Tk()
    sLogin(login)  # 登录窗体为第一启动对象
    login.mainloop()

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 方法有很多,可以用Python自带的tkinter模块编写GUI界面,通过编写代码实现学生信息的增删改查、管理等功能。也可以使用第三方GUI库,如PyQt、wxPython、PyGTK等来实现。另外还需要结合数据库来存储学生信息,并通过Python的数据库操作模块进行增删改查等操作。总之,需要掌握PythonGUI编程技术和数据库操作技术。 ### 回答2: Python学生管理系统是一款Python语言开发学生信息管理软件,它通过GUI界面来实现对学生信息的录入、查询、修改、删除等功能。这款软件以Python的优势为基础,不仅对学生信息进行了高效的管理,而且还采用了方便易用的图形界面,使得用户可以更方便地进行使用。 Python实现GUI学生信息管理系统的主要特点是使用了图形用户界面。这个界面使得整个系统的使用变得非常直观和方便。以学生信息录入为例,它可以让用户直接通过界面输入学生的基本信息,如姓名、性别、班级、学号等信息。系统将这些信息保存在一个数据库中,方便进行管理。 此外,Python学生管理系统还可对学生信息进行查询、修改、删除等操作。用户在系统中选择查看学生信息时,系统会根据用户的选择,从数据库中提取相关信息并显示在界面上。在对学生信息进行修改时,用户也可以直接通过修改界面来完成信息的更新操作。同时,由于系统还具有一些辅助功能,例如统计信息、备份、恢复等功能,使得整个系统更加完整和实用。 GUI学生信息管理系统的Python实现还具有其他的一些特色功能,例如数据分析、可定制性、批量操作等等。这些功能赋予了用户对数据的更深层次的掌控,可以更好地满足一些特殊需求。 综上所述,Python学生管理系统是一款便于操作、高效实用的学生信息管理软件,其通过图形用户界面的方式,使得用户对学生信息的管理工作更加方便和快捷,是现代学校、机构、个人等进行学生信息管理的优秀选择。 ### 回答3: Python是一种非常流行的编程语言,用途十分广泛,其中包括学生信息管理系统。学生信息管理系统主要是通过对学生的信息进行电子化管理,方便学生和教师的查询、维护和更新。而Python实现学生信息管理系统,也是极其方便和便捷的。 Python实现GUI学生信息管理系统,主要需要掌握一些基本的GUI组件的知识,如窗口、标签、文本框、按钮、下拉框等,还需要了解Python中与数据库相关的库,如MySQLdb,SQLite等。 首先,需要创建一个主窗口,并在主窗口中添加需要的各种GUI组件。比如可以在主窗口中添加一个文本框,用于输入学生的姓名或学号,再添加一个搜索按钮,用于搜索和查询学生信息。还可以添加一个下拉框,用于选择学生所属的班级,以及添加一个“增加学生”按钮,用于添加新学生的信息。 使用Python实现学生信息管理系统界面的基本思路是:先创建主窗口,再在主窗口中添加控件,并定义其事件处理函数,然后在事件处理函数中完成相应的数据库操作。 Python实现学生信息管理系统界面的好处在于其代码简单、易学易懂,同时还具有高效和可维护性等特点。Python的语法易于理解,便于快速开发,而且同时还拥有丰富的第三方库,例如Tkinter、PyQT等,大大简化了Python实现GUI界面的复杂程度。 总的来说,Python实现GUI学生信息管理系统是一种非常有用的技术,既简单易懂,同时也非常具有实用性,能够帮助教师和管理员更方便快捷地管理学生信息,提高管理效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小瑾比个耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值