PythonStudio:国人开发的python窗体IDE,学生管理系统

国人开发的python窗体设计IDE,详情请看:PythonStudio:一款国人写的python及窗口开发编辑IDE,可以替代pyqt designer等设计器了-CSDN博客

这个软件作者还录制了入门的教程,跟着视频做,是个不错的python视频教程呢。从软件的使用,窗体的设计,到python的学习, 对小白来说很友好啊。

最最最主要的,这个软件自带很多皮肤,漂亮的皮肤。

我跟着教程做这个学生信息管理系统,感觉使用它来做python窗口软件程序,真的很方便快捷。

Project1.py

from delphivcl import *
from Unit1 import *def main():Application.Initialize()Application.Title = '学生管理系统'MainForm = Form1(Application)MainForm.Show()FreeConsole()Application.Run()if __name__ == '__main__':main()

Unit1.py

import os
from delphivcl import *
from Unit2 import *
from Unit3 import *
from Unit4 import *
from Unit5 import *class Form1(Form):def __init__(self, owner):self.Button7 = Button(self)self.Button6 = Button(self)self.Button5 = Button(self)self.Button4 = Button(self)self.Button3 = Button(self)self.Button2 = Button(self)self.Button1 = Button(self)self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit1.pydfm"))self.Button5.OnClick = self.Button5Clickself.Button4.OnClick = self.Button4Clickself.Button6.OnClick = self.Button6Clickself.Button1.OnClick = self.Button1Clickself.sm = StyleManager()self.sm.LoadFromFile("Windows10Malibu.vsf")self.sm.SetStyle('Windows10 Malibu')def Button1Click(self, Sender):frmAdd = Form2(self)frmAdd.ShowModal()def Button6Click(self, Sender):frmSearch = Form3(self)frmSearch.ShowModal()def Button4Click(self, Sender):frmDelete = Form4(self)frmDelete.ShowModal()def Button5Click(self, Sender):frmModify = Form5(self)frmModify.ShowModal()

Unit2.py

import os
from delphivcl import *filename = 'Students.txt'  # 定义学生信息文件class Form2(Form):def __init__(self, owner):self.BitBtn3 = BitBtn(self)self.BitBtn2 = BitBtn(self)self.BitBtn1 = BitBtn(self)self.LabeledEdit5 = LabeledEdit(self)self.LabeledEdit4 = LabeledEdit(self)self.LabeledEdit3 = LabeledEdit(self)self.LabeledEdit2 = LabeledEdit(self)self.LabeledEdit1 = LabeledEdit(self)self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit2.pydfm"))self.BitBtn2.OnClick = self.BitBtn2Clickself.BitBtn1.OnClick = self.BitBtn1Clickdef insert(self):'''录入学生信息'''studentList = [] # 保存学生信息的列表stu_id = self.LabeledEdit1.Textif not stu_id: # stu_id 为空ShowMessage('ID不能为空!')returnstu_name = self.LabeledEdit2.Textif not stu_name:  # stu_name 为空ShowMessage('姓名不能为空!')returntry:english = int(self.LabeledEdit3.Text)jsj = int(self.LabeledEdit4.Text)stu_math = int(self.LabeledEdit5.Text)except:ShowMessage('成绩应该是数值!')returnstudent = {'id':stu_id,'name':stu_name,'english':english,'jsj':jsj,'math':stu_math,}studentList.append(student)# 保存到文件里self.fileSave(studentList)ShowMessage('学生信息录入完成')def fileSave(self,student):'''将学生信息保存到文件'''try:stu_file = open(filename,'a')except Exception as e:stu_file = open(filename,'w') # 文件不存在就创建for info in student:stu_file.write(str(info)+'\n') # 按行存储stu_file.close()def BitBtn1Click(self, Sender):self.insert()def BitBtn2Click(self, Sender):self.LabeledEdit1.Clear()self.LabeledEdit2.Clear()self.LabeledEdit3.Clear()self.LabeledEdit4.Clear()self.LabeledEdit5.Clear()

Unit3.py

import os
from delphivcl import *
filename = 'Students.txt'  # 定义学生信息文件class Form3(Form):def __init__(self, owner):self.Button2 = Button(self)self.Button1 = Button(self)self.Edit1 = Edit(self)self.Memo1 = Memo(self)self.RadioGroup1 = RadioGroup(self)self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit3.pydfm"))self.Button2.OnClick = self.Button2Clickself.Button1.OnClick = self.Button1Clickdef search(self):'''查找学生信息'''student_query = []stu_id = ""stu_name=""if os.path.exists(filename):mode = self.RadioGroup1.ItemIndexif mode == 0:stu_id = self.Edit1.Textelif mode == 1:stu_name = self.Edit1.Textelse:ShowMessage('输入不能为空!')returnwith open(filename,'r') as file: # 打开文件student = file.readlines() # 读取所有行for list in student:dic = dict(eval(list))  # 字符串转换成字典if stu_id is not "":  # id 不为空if dic['id']==stu_id:student_query.append(dic)  # 将找到的学生信息保存到列表elif stu_name is not "": # name 不为空if dic['name']==stu_name:student_query.append(dic)# 使用函数显示查询结果self.show_student(student_query)student_query.clear() # 清空列表else:# 文件不存在ShowMessage('数据信息未保存!!')def show_student(self,studentList):'''将保存在列表的学生信息显示出来'''if not studentList:self.Memo1.Lines.Add('无数据显示')return# 使用空格,显示的更整齐format_title = "{:^4}\t{:^4}\t{:^4}\t{:^6}\t{:^10}\t{:^10}"count = self.Memo1.Lines.Countif count < 2 :self.Memo1.Lines.Add(format_title.format("ID","姓名","英语","计算机","数学","总成绩"))for info in studentList:self.Memo1.Lines.Add(format_title.format(info.get('id'),info.get('name'),str(info.get('english')).center(5),str(info.get('jsj')).center(10),str(info.get('math')).center(12),str(info.get('english')+info.get('jsj')+info.get('math')).center(12),))def Button1Click(self, Sender):self.search()def Button2Click(self, Sender):self.RadioGroup1.ItemIndex=-1self.Edit1.Clear()self.Memo1.Clear()

Unit4.py

import os
from delphivcl import *
filename = 'Students.txt'  # 定义学生信息文件class Form4(Form):def __init__(self, owner):self.Button2 = Button(self)self.Button1 = Button(self)self.LabeledEdit1 = LabeledEdit(self)self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit4.pydfm"))self.Button2.OnClick = self.Button2Clickself.Memo1 = Memo(self)self.RadioGroup1 = RadioGroup(self)def delete(self):'''删除学生信息'''stu_id = self.LabeledEdit1.Textif stu_id is not "": # 输入不为空if os.path.exists(filename):with open(filename,'r') as file:student_old = file.readlines()else:student_old = []flag = Falseif student_old:  # 如果存在with open(filename,'w') as wfile:doc = {}for list in student_old:doc = dict(eval(list))  # 字符串转换成字典if doc['id'] != stu_id:wfile.write(str(doc)+'\n')else:flag = Trueif flag:self.Memo1.Lines.Add(f'ID为{stu_id}的学生信息已删除')else:self.Memo1.Lines.Add(f'未找到ID为{stu_id}的学生信息')else:self.Memo1.Lines.Add('无该学生信息')return# 显示全部学生信息def show_student(self,studentList):'''将保存在列表的学生信息显示出来'''if not studentList:self.Memo1.Lines.Add('无数据显示')return# 使用空格,显示的更整齐format_title = "{:^4}\t{:^4}\t{:^4}\t{:^6}\t{:^10}\t{:^10}"count = self.Memo1.Lines.Countif count < 2 :self.Memo1.Lines.Add(format_title.format("ID","姓名","英语","计算机","数学","总成绩"))for info in studentList:self.Memo1.Lines.Add(format_title.format(info.get('id'),info.get('name'),str(info.get('english')).center(5),str(info.get('jsj')).center(10),str(info.get('math')).center(12),str(info.get('english')+info.get('jsj')+info.get('math')).center(12),))def show_all(self):'''显示所有学生信息'''stu_new = []if os.path.exists(filename):with open(filename,'r') as rfile:stu_old = rfile.readlines()for list in stu_old:stu_new.append(eval(list))if stu_new:self.show_student(stu_new)else:self.Memo1.Lines.Add('暂未保存数据信息。。。')def Button2Click(self, Sender):self.delete()

Unit5.py

import os
from delphivcl import *filename = 'Students.txt'  # 定义学生信息文件class Form5(Form):def __init__(self, owner):self.BitBtn4 = BitBtn(self)self.BitBtn3 = BitBtn(self)self.BitBtn2 = BitBtn(self)self.BitBtn1 = BitBtn(self)self.LabeledEdit5 = LabeledEdit(self)self.LabeledEdit4 = LabeledEdit(self)self.LabeledEdit3 = LabeledEdit(self)self.LabeledEdit2 = LabeledEdit(self)self.LabeledEdit1 = LabeledEdit(self)self.LoadProps(os.path.join(os.path.dirname(os.path.abspath(__file__)), "Unit5.pydfm"))self.BitBtn4.OnClick = self.BitBtn4Clickself.BitBtn1.OnClick = self.BitBtn1Clickdef BitBtn1Click(self, Sender):'''修改学生信息'''stu_id = self.LabeledEdit1.Textname = self.LabeledEdit2.Textenglish = self.LabeledEdit3.Textjsj = self.LabeledEdit4.Textmath = self.LabeledEdit5.Textif stu_id is not "":if name is not "":if english is not "":if jsj is not "":if math is not "":stu = dict()stu['id'] = stu_idstu['name'] = namestu['english'] = int(english)stu['jsj'] = int(jsj)stu['math'] = int(math)flag = Falsewith open(filename,'r') as rfile:student_old = rfile.readlines()with open(filename,'w') as wfile:for student in student_old:stud = dict(eval(student))if stud['id'] == stu_id:flag = Truestudent = str(stu)  # 将字典转换为字符串wfile.write(student)if flag:ShowMessage('修改成功。。')else:ShowMessage('id不存在或数据未变化。。')else:ShowMessage('数学不能为空')returnelse:ShowMessage('计算机不能为空')returnelse:ShowMessage('英语不能为空')returnelse:ShowMessage('姓名不能为空')returnelse:ShowMessage('id不能为空')returndef BitBtn4Click(self, Sender):'''查询学生信息'''stu_id = self.LabeledEdit1.Textif stu_id is not "": # 输入不为空if os.path.exists(filename):with open(filename,'r') as file:student_old = file.readlines()else:student_old = []ShowMessage('未保存数据')flag = Falseif student_old:  # 如果存在for list in student_old:doc = dict(eval(list))  # 字符串转换成字典if doc['id'] == stu_id:flag = Trueself.LabeledEdit2.Text=doc['name']self.LabeledEdit3.Text=doc['english']self.LabeledEdit4.Text=doc['jsj']self.LabeledEdit5.Text=doc['math']if flag == False:ShowMessage('id不存在')self.LabeledEdit2.Text=''self.LabeledEdit3.Text=''self.LabeledEdit4.Text=''self.LabeledEdit5.Text=''else:ShowMessage('数据为空')else:ShowMessage('id不能为空')return# 显示全部学生信息

本来还有排序和显示2个窗体的,我没有做。我使用的是皮肤 Windows10 Malibu。

        self.sm = StyleManager()self.sm.LoadFromFile("Windows10Malibu.vsf")self.sm.SetStyle('Windows10 Malibu')

 3行代码,加个123kb的文件,就给几个窗口都换了皮肤了,真的方便啊。

PythonStudio用来做python窗体软件设计工具,真的很不错,大家赶快来试试吧。软件下载链接在顶部。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/284909.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql使用全文索引+ngram全文解析器进行全文检索

表结构&#xff1a;表名 gamedb 主键 id 问题类型 type 问题 issue 答案 answer 需求 现在有个游戏资料库储存在mysql中&#xff0c;客户端进行搜索&#xff0c;需要对三个字段进行匹配&#xff0c;得到三个字段的相关性&#xff0c;选出三个字段中相关性最大的值进…

Python---进程

1. 进程的介绍 在Python程序中&#xff0c;想要实现多任务可以使用进程来完成&#xff0c;进程是实现多任务的一种方式。 2. 进程的概念 一个正在运行的程序或者软件就是一个进程&#xff0c;它是操作系统进行资源分配的基本单位&#xff0c;也就是说每启动一个进程&#xf…

第三十五周:文献阅读+Self-attention

目录 摘要 Abstract 文献阅读&#xff1a;基于LSTM和注意机制的水质预测 现有问题 提出方法 前提点 1. LSTM 2. 注意力机制 研究模型&#xff08;AT-LSTM&#xff09;结构 模型验证 总结AT-LSTM优于LSTM的方面 Self-attention&#xff08;自注意力机制&#xff09;…

机器学习——支持向量机

目录 一、基于最大间隔分隔数据 二、寻找最大间隔 1. 最大间隔 2. 拉格朗日乘子法 3. 对偶问题 三、SMO高效优化算法 四、软间隔 五、SMO算法实现 1. 简化版SMO算法 2. 完整版SMO算法 3. 可视化决策结果 六、核函数 1. 线性不可分——高维可分 2. 核函数 …

100GPTS计划-AI翻译TransLingoPro

地址 https://poe.com/TransLingoPro https://chat.openai.com/g/g-CfT8Otig6-translingo-pro 测试 输入: 我想吃中国菜。 预期翻译: I want to eat Chinese food. 输入: 请告诉我最近的医院在哪里。 预期翻译: Please tell me where the nearest hospital is. 输入: 明天…

React实现全局Loading

css #__loading {position:fixed;top: 0;left: 0;z-index: 99999;display: flex;align-items: center;justify-content: center;width: 100%;height: 100%;background: rgba(0, 0, 0, 0); } 页面代码 使用了antd的Spin组件 import React from react import ReactDOM from re…

举办知识竞赛活动的目的和意义

上世纪80年代以来&#xff0c;知识竞赛日益普及&#xff0c;已成为广大青年所喜爱的一项活动。“知识竞赛热”的出现不是偶然的&#xff0c;它是读书活动深入发展的结果&#xff0c;是广大青年求知成才的一个缩影。因此&#xff0c;如何组织好知识竞赛&#xff0c;是一个需要认…

LLaMA系列模型

1.LLama 1.1 简介 Open and Efficient Foundation Language Models (Open但没完全Open的LLaMA) 2023年2月&#xff0c;Meta&#xff08;原Facebook&#xff09;推出了LLaMA大模型&#xff0c;使用了1.4T token进行训练&#xff0c;虽然最大模型只有65B&#xff0c;但在相关评…

vs code调试.so文件

使用vs code调试.so文件 1 vs code中安装c的debug插件2 【重要】编写launch.json3 在.so的源码中打断点4 debug模式启动进程5 attach进程6 开始调试 .so是一种动态链接库&#xff0c;在大型项目以及跨语言项目中经常用到。在拿到.so文件对应的源码后进行debug呢&#xff1f; 简…

区域和检索算法(leetcode第303题)

题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;处理以下类型的多个查询:计算索引 left 和 right &#xff08;包含 left 和 right&#xff09;之间的 nums 元素的 和 &#xff0c;其中 left < right 实现 NumArray 类&#xff1a;NumArray(int[] nums) 使用数组…

【NSX-T】7. 搭建NSX-T环境 —— 部署和配置 Edge Cluster

目录 7. 部署和配置 Edge Cluster7.1 配置 Edge 节点&#xff08;1&#xff09;Name and Description&#xff08;2&#xff09;Credentials&#xff08;3&#xff09;Configure Deployment&#xff08;4&#xff09;Configure Node Settings&#xff08;5&#xff09;Configur…

软件测试技术分享| Appium用例录制

下载及安装 下载地址&#xff1a; github.com/appium/appi… 下载对应系统的 Appium 版本&#xff0c;安装完成之后&#xff0c;点击 “Start Server”&#xff0c;就启动了 Appium Server。 在启动成功页面点击右上角的放大镜&#xff0c;进入到创建 Session 页面。配置好…