初学者,仅供学习交流

Python学习两周时间了,这是我目前编写的比较满意的一个程序,有以下几个方面的经验总结:

1.布局管理是可视化编程的基础思维,尽量避免定点式布局,不规则分布的各种控件可以局部先用wx.StaticBoxSizer(静态框)水平或垂直组合,再横向或纵向上与其他控件组合并,利用布局管理的内置参数设置,灵活控制想要的显示效果。需要说明的是,在wxpython里布局管理器不是容器,而是通过它对加入其中的控件进行自适应管理。
2.控件的动态管理问题。这里说的动态不是动画效果,而是不同操作对控件组Show(False)(不可见)和Show(True)(可见)的整体控制。例如学生信息管理系统里有4个按钮,分别控制:查询学生信息、添加学生信息、删除学生信息和退出系统的操作,虽然功能看上去很简单,但每个按钮所调用的控件数也不少,而且在面板布局上是有重叠的。刚开始我的思路是,在父面板上把所有需要的控件都做出来,初始化都设置成Show(False),当调用某个按钮操作时,再Show(True)对应的控件组,如此反复。这样的代码显得特别臃肿繁琐,而且Python程序是由上至下一条条指令运行的,控件显示和消失是有先后顺序的,屏幕分辨率高的话肉眼都能看到控件波浪式消失再现的效果,这个问题目前我查阅的资料里没有找到有效的解决办法。我最终的解决办法是:用类函数嵌套调用跳转同时关闭自己(self.Close()),实现所属控件组随父面板一并关闭,再整体开启新面板及其控件,有点像接龙。说得可能有点抽象,大家可以看下面的具体代码,这种方法也许我还是首创(幻想中…)。用这种方法居然还能自己调用自己再把自己关闭,实现自我刷新,在代码中定义删除学生信息类里有所体现。当时仅仅是按照设计思路抱着尝试一下的心态,居然可行,真是意外的收获。
3.类的继承是一个效率很高的方法,还是拿学生信息管理系统为例,系统操作界面上有多个控件是固定不变的,利用第二点经验里说的方法,免不了会重复构建一些常态控件。用类继承的方法可以大大的压缩代码量,提高开发效率。需要强调的是,做类的继承父类操作时,必须加上super(B,self).init(*args, **kw),确保B的父类被调用(工作原理:首先找到B的父类(比如是类A),然后把类B的对象self转换为类A的对象,然后“被转换”的类A对象调用自己的__init__函数),不然你会发现在想调用父类的对象和方法时,系统会报对象或方法未定义的错误。(*args, **kw)是python中的可变参数。(*args)表示任何多个无名参数,它是一个tuple;(**kw)表示关键字参数,它是一个dict。并且同时使用(*args)和(**kw)时,必须(*args)参数列要在(**kw)前。
第二、三条是学生信息管理系统开发的核心编程思维。

好了,以上是我的一些粗浅认识,感觉很多都是废话,但作为初学者来说,每一次实践的总结都是自我提升的过程。下面进入主题:

一、建数据库

过程就不说了,直接附上我导出的数据:

-- MySQL dump 10.16  Distrib 10.1.35-MariaDB, for Win32 (AMD64)
--
-- Host: localhost    Database: login_users
-- ------------------------------------------------------
-- Server version   10.1.35-MariaDB/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;--
-- Current Database: `login_users`
--CREATE DATABASE /*!32312 IF NOT EXISTS*/ `login_users` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `login_users`;--
-- Table structure for table `stu_info`
--DROP TABLE IF EXISTS `stu_info`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `stu_info` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '学生id',`stu_name` varchar(32) NOT NULL COMMENT '姓名',`stu_gender` enum('男','女') NOT NULL COMMENT '性别',`stu_age` tinyint(3) unsigned NOT NULL COMMENT '年龄',`stu_cid` varchar(32) NOT NULL COMMENT 'CSDN账号',`stu_classid` varchar(32) NOT NULL COMMENT '学习课程',`stu_phone` varchar(32) NOT NULL COMMENT '联系方式',PRIMARY KEY (`id`),UNIQUE KEY `stu_name` (`stu_name`),UNIQUE KEY `stu_cid` (`stu_cid`),UNIQUE KEY `stu_phone` (`stu_phone`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `stu_info`
--LOCK TABLES `stu_info` WRITE;
/*!40000 ALTER TABLE `stu_info` DISABLE KEYS */;
INSERT INTO `stu_info` VALUES (1,'测试姓名1','男',20,'000001','Python01','测试联系方式1'),(2,'测试姓名2','男',23,'000002','Python02','测试联系方式2'),(3,'测试姓名3','女',21,'000003','Python03','测试联系方式3'),(4,'测试姓名4','男',28,'000004','php01','测试联系方式4'),(5,'测试姓名5','男',30,'000005','php02','测试联系方式5'),(6,'测试姓名6','女',25,'000006','php03','测试联系方式6'),(7,'测试姓名7','男',35,'000007','JavaScript01','测试联系方式7'),(8,'测试姓名8','男',31,'000008','JavaScript02','测试联系方式8'),(9,'测试姓名9','女',26,'000009','JavaScript03','测试联系方式9'),(10,'测试姓名10','男',24,'000010','SQL01','测试联系方式10');
/*!40000 ALTER TABLE `stu_info` ENABLE KEYS */;
UNLOCK TABLES;--
-- Table structure for table `users`
--DROP TABLE IF EXISTS `users`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `users` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id',`user_name` varchar(32) NOT NULL COMMENT '用户名',`user_password` varchar(23) NOT NULL COMMENT '登录密码',PRIMARY KEY (`id`),UNIQUE KEY `user_name` (`user_name`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;--
-- Dumping data for table `users`
--LOCK TABLES `users` WRITE;
/*!40000 ALTER TABLE `users` DISABLE KEYS */;
INSERT INTO `users` VALUES (1,'admin','Python09'),(2,'momobaba','123456');
/*!40000 ALTER TABLE `users` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;-- Dump completed on 2018-09-17 21:29:53

在login_users数据库里创建两个数据表,一个是系统用户的表users,包含用户名、登录密码字段;一个是学生信息表stu_info,包含姓名、性别、年龄、CSDN号、学习课程、联系方式字段。

users表结构

users表数据

stu_info表结构

stu_info表数据

共10条数据,后面省略了

二、Python实现数据操作

思路:用构造函数建立数据库连接,用析构函数关闭数据库,其它函数实现数据库的查、增、删操作。

#导入pymysql模块
import pymysql#创建数据库操作类
class Sql_operation(object):'''数据库操作'''#用构造函数实现数据库连接,并引入mydb参数,实现调用不同的数据库def __init__(self,mydb): #实例变量self.mydb = mydb#打开数据库连接self.db = pymysql.connect(host = "localhost",user = "root",password = "",db = self.mydb,charset = "utf8")#创建游标对象self.cursor = self.db.cursor()#定义查看数据表信息函数,并引入table_field、table_name参数,实现查看不同数据表的建表语句def FindAll(self,table_name):#实例变量self.table_name = table_name#定义SQL语句sql = "select * from %s"%(self.table_name)try:#执行数据库操作self.cursor.execute(sql)#处理结果data = self.cursor.fetchall()return data            except Exception as err:print("SQL执行错误,原因:",err)#定义添加表数据函数def Insert(self,stu_name,stu_gender,stu_age,stu_cid,stu_classid,stu_phone):#实例变量self.stu_name = stu_nameself.stu_gender = stu_genderself.stu_age = stu_ageself.stu_cid = stu_cidself.stu_classid = stu_classidself.stu_phone = stu_phone#定义SQL语句sql = "insert into stu_info(stu_name,stu_gender,stu_age,stu_cid,stu_classid,stu_phone) values('%s','%s','%s','%s','%s','%s')"%(self.stu_name,self.stu_gender,self.stu_age,self.stu_cid,self.stu_classid,self.stu_phone)try:#执行数据库操作self.cursor.execute(sql)#事务提交self.db.commit()except Exception as err:#事务回滚self.db.rollback()print("SQL执行错误,原因:",err)#定义删除表数据函数def Del(self,stu_id):#实例变量self.stu_id = stu_id     #定义SQL语句sql = "delete from stu_info where id=%d"%(self.stu_id)try:#执行数据库操作self.cursor.execute(sql)#事务提交self.db.commit()except Exception as err:#事务回滚self.db.rollback()print("SQL执行错误,原因:",err)#用析构函数实现数据库关闭def __del__(self):#关闭数据库连接self.db.close()

三、wxpython实现可视化

#导入mx模块
import wx
import wx.grid
from mydb import Sql_operation
#创建CSDN学生信息管理系统登录界面类
class UserLogin(wx.Frame):'''登录界面'''#初始化登录界面def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(UserLogin,self).__init__(*args, **kw)#设置窗口屏幕居中self.Center()#创建窗口self.pnl = wx.Panel(self)#调用登录界面函数self.LoginInterface()def LoginInterface(self):#创建垂直方向box布局管理器vbox = wx.BoxSizer(wx.VERTICAL)##################################################################################创建logo静态文本,设置字体属性logo = wx.StaticText(self.pnl,label="CSDN学生信息管理系统")font = logo.GetFont()font.PointSize += 30font = font.Bold()logo.SetFont(font)#添加logo静态文本到vbox布局管理器vbox.Add(logo,proportion=0,flag=wx.FIXED_MINSIZE | wx.TOP | wx.CENTER,border=180)##################################################################################创建静态框sb_username = wx.StaticBox(self.pnl,label="用户名")sb_password = wx.StaticBox(self.pnl,label="密  码")      #创建水平方向box布局管理器hsbox_username = wx.StaticBoxSizer(sb_username,wx.HORIZONTAL)hsbox_password = wx.StaticBoxSizer(sb_password,wx.HORIZONTAL)#创建用户名、密码输入框self.user_name = wx.TextCtrl(self.pnl,size=(210,25))self.user_password = wx.TextCtrl(self.pnl,size=(210,25))#添加用户名和密码输入框到hsbox布局管理器hsbox_username.Add(self.user_name,0,wx.EXPAND | wx.BOTTOM,5)hsbox_password.Add(self.user_password,0,wx.EXPAND | wx.BOTTOM,5)#将水平box添加到垂直boxvbox.Add(hsbox_username,proportion=0,flag=wx.CENTER)vbox.Add(hsbox_password,proportion=0,flag=wx.CENTER)##################################################################################创建水平方向box布局管理器hbox = wx.BoxSizer()#创建登录按钮、绑定事件处理login_button = wx.Button(self.pnl,label="登录",size=(80,25))login_button.Bind(wx.EVT_BUTTON,self.LoginButton)#添加登录按钮到hbox布局管理器hbox.Add(login_button,0,flag=wx.EXPAND | wx.TOP,border=5)#将水平box添加到垂直boxvbox.Add(hbox,proportion=0,flag=wx.CENTER)##################################################################################设置面板的布局管理器vbox     self.pnl.SetSizer(vbox)     def LoginButton(self,event):#连接login_users数据库op = Sql_operation("login_users")#获取users表中的用户名和密码信息,返回为二维元组np = op.FindAll("users")#匹配标记login_sign = 0#匹配用户名和密码for i in np:if (i[1] == self.user_name.GetValue()) and (i[2] == self.user_password.GetValue()):login_sign = 1breakif login_sign == 0:print("用户名或密码错误!")elif login_sign == 1:print("登录成功!")            operation = UserOperation(None,title="CSDN学生信息管理系统",size=(1024,668))operation.Show()self.Close(True)class UserOperation(wx.Frame):'''操作界面'''def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(UserOperation,self).__init__(*args, **kw)#设置窗口屏幕居中self.Center()#创建窗口self.pnl = wx.Panel(self)#调用操作界面函数self.OperationInterface()def OperationInterface(self):#创建垂直方向box布局管理器self.vbox = wx.BoxSizer(wx.VERTICAL)       ##################################################################################创建logo静态文本,设置字体属性logo = wx.StaticText(self.pnl,label="CSDN学生信息管理系统")font = logo.GetFont()font.PointSize += 30font = font.Bold()logo.SetFont(font)#添加logo静态文本到vbox布局管理器self.vbox.Add(logo,proportion=0,flag=wx.FIXED_MINSIZE | wx.TOP | wx.CENTER,border=5)##################################################################################创建静态框sb_button = wx.StaticBox(self.pnl,label="选择操作")#创建垂直方向box布局管理器vsbox_button = wx.StaticBoxSizer(sb_button,wx.VERTICAL)#创建操作按钮、绑定事件处理check_button = wx.Button(self.pnl,id=10,label="查看学生信息",size=(150,50))add_button = wx.Button(self.pnl,id=11,label="添加学生信息",size=(150,50))delete_button = wx.Button(self.pnl,id=12,label="删除学生信息",size=(150,50))quit_button = wx.Button(self.pnl,id=13,label="退出系统",size=(150,50))self.Bind(wx.EVT_BUTTON,self.ClickButton,id=10,id2=13)#添加操作按钮到vsbox布局管理器vsbox_button.Add(check_button,0,wx.EXPAND | wx.BOTTOM,40)vsbox_button.Add(add_button,0,wx.EXPAND | wx.BOTTOM,40)vsbox_button.Add(delete_button,0,wx.EXPAND | wx.BOTTOM,40)vsbox_button.Add(quit_button,0,wx.EXPAND | wx.BOTTOM,200)      #创建静态框sb_show_operation = wx.StaticBox(self.pnl,label="显示/操作窗口",size=(800,500))#创建垂直方向box布局管理器self.vsbox_show_operation = wx.StaticBoxSizer(sb_show_operation,wx.VERTICAL)#创建水平方向box布局管理器hbox = wx.BoxSizer()hbox.Add(vsbox_button,0,wx.EXPAND | wx.BOTTOM,5)hbox.Add(self.vsbox_show_operation,0,wx.EXPAND | wx.BOTTOM,5)#将hbox添加到垂直box     self.vbox.Add(hbox,proportion=0,flag=wx.CENTER)       #################################################################################self.pnl.SetSizer(self.vbox)def ClickButton(self,event):source_id = event.GetId()if source_id == 10:print("查询操作!")inquire_button = InquireOp(None,title="CSDN学生信息管理系统",size=(1024,668))inquire_button.Show()self.Close(True)          elif source_id == 11:print("添加操作!")add_button = AddOp(None,title="CSDN学生信息管理系统",size=(1024,668))add_button.Show()self.Close(True)                       elif source_id == 12:print("删除操作!")del_button = DelOp(None,title="CSDN学生信息管理系统",size=(1024,668))del_button.Show()self.Close(True)           elif source_id == 13:self.Close(True)#继承UserOperation类,实现初始化操作界面
class InquireOp(UserOperation):def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(InquireOp,self).__init__(*args, **kw)#创建学生信息网格      self.stu_grid = self.CreateGrid()          self.stu_grid.Bind(wx.grid.EVT_GRID_LABEL_LEFT_CLICK,self.OnLabelleftClick)#添加到vsbox_show_operation布局管理器self.vsbox_show_operation.Add(self.stu_grid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,30)     def ClickButton(self,event):source_id = event.GetId()if source_id == 10:pass                     elif source_id == 11:print("添加操作!")add_button = AddOp(None,title="CSDN学生信息管理系统",size=(1024,668))add_button.Show()self.Close(True)                       elif source_id == 12:print("删除操作!")del_button = DelOp(None,title="CSDN学生信息管理系统",size=(1024,668))del_button.Show()self.Close(True)           elif source_id == 13:self.Close(True)def CreateGrid(self):#连接login_users数据库op = Sql_operation("login_users")#获取stu_information表中的学生信息,返回为二维元组np = op.FindAll("stu_info")column_names = ("姓名","性别","年龄","CSDN账号","学习课程","联系方式")stu_grid = wx.grid.Grid(self.pnl)stu_grid.CreateGrid(len(np),len(np[0])-1)for row in range(len(np)):stu_grid.SetRowLabelValue(row,str(np[row][0]))#确保网格序列号与数据库id保持一致for col in range(1,len(np[row])):stu_grid.SetColLabelValue(col-1,column_names[col-1])                stu_grid.SetCellValue(row,col-1,str(np[row][col]))              stu_grid.AutoSize()return stu_griddef OnLabelleftClick(self,event):#连接login_users数据库op = Sql_operation("login_users")#获取users表中的用户名和密码信息,返回为二维元组np = op.FindAll("stu_info")print("RowIdx: {0}".format(event.GetRow()))print("ColIdx: {0}".format(event.GetRow()))print(np[event.GetRow()])event.Skip()#继承UserOperation类,实现初始化操作界面
class AddOp(UserOperation):def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(AddOp,self).__init__(*args, **kw)#创建添加学生信息输入框、添加按钮self.stu_name = wx.TextCtrl(self.pnl,size = (210,25))self.stu_gender = wx.TextCtrl(self.pnl,size = (210,25))self.stu_age = wx.TextCtrl(self.pnl,size = (210,25))self.stu_cid = wx.TextCtrl(self.pnl,size = (210,25))self.stu_classid = wx.TextCtrl(self.pnl,size = (210,25))self.stu_phone = wx.TextCtrl(self.pnl,size = (210,25))self.add_affirm = wx.Button(self.pnl,label="添加",size=(80,25))#为添加按钮组件绑定事件处理self.add_affirm.Bind(wx.EVT_BUTTON,self.AddAffirm)##################################################################################创建静态框sb_name = wx.StaticBox(self.pnl,label="姓  名")sb_gender = wx.StaticBox(self.pnl,label="性  别")sb_age = wx.StaticBox(self.pnl,label="年  龄")sb_cid = wx.StaticBox(self.pnl,label="CSDN号")sb_classid = wx.StaticBox(self.pnl,label="学习课程")sb_phone = wx.StaticBox(self.pnl,label="联系方式")        #创建水平方向box布局管理器hsbox_name = wx.StaticBoxSizer(sb_name,wx.HORIZONTAL)hsbox_gender = wx.StaticBoxSizer(sb_gender,wx.HORIZONTAL)hsbox_age = wx.StaticBoxSizer(sb_age,wx.HORIZONTAL)hsbox_cid = wx.StaticBoxSizer(sb_cid,wx.HORIZONTAL)hsbox_classid = wx.StaticBoxSizer(sb_classid,wx.HORIZONTAL)hsbox_phone = wx.StaticBoxSizer(sb_phone,wx.HORIZONTAL)#添加到hsbox布局管理器hsbox_name.Add(self.stu_name,0,wx.EXPAND | wx.BOTTOM,5)hsbox_gender.Add(self.stu_gender,0,wx.EXPAND | wx.BOTTOM,5)hsbox_age.Add(self.stu_age,0,wx.EXPAND | wx.BOTTOM,5)hsbox_cid.Add(self.stu_cid,0,wx.EXPAND | wx.BOTTOM,5)hsbox_classid.Add(self.stu_classid,0,wx.EXPAND | wx.BOTTOM,5)hsbox_phone.Add(self.stu_phone,0,wx.EXPAND | wx.BOTTOM,5)##################################################################################添加到vsbox_show_operation布局管理器self.vsbox_show_operation.Add(hsbox_name,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_gender,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_age,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_cid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_classid,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(hsbox_phone,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(self.add_affirm,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)def ClickButton(self,event):source_id = event.GetId()if source_id == 10:print("查询操作!")inquire_button = InquireOp(None,title="CSDN学生信息管理系统",size=(1024,668))inquire_button.Show()self.Close(True)            elif source_id == 11:pass                     elif source_id == 12:print("删除操作!")del_button = DelOp(None,title="CSDN学生信息管理系统",size=(1024,668))del_button.Show()self.Close(True)           elif source_id == 13:self.Close(True)def AddAffirm(self,event):#连接login_users数据库op = Sql_operation("login_users")#向stu_information表添加学生信息stu_name = self.stu_name.GetValue()print(stu_name)stu_gender = self.stu_gender.GetValue()print(stu_gender)stu_age = self.stu_age.GetValue()print(stu_age)stu_cid = self.stu_cid.GetValue()print(stu_cid)      stu_classid = self.stu_classid.GetValue()print(stu_classid)stu_phone = self.stu_phone.GetValue()print(stu_phone)np = op.Insert(stu_name,stu_gender,stu_age,stu_cid,stu_classid,stu_phone)#继承InquireOp类,实现初始化操作界面
class DelOp(InquireOp):def __init__(self,*args,**kw):# ensure the parent's __init__ is calledsuper(DelOp,self).__init__(*args, **kw)#创建删除学员信息输入框、删除按钮self.del_id = wx.TextCtrl(self.pnl,pos = (407,78),size = (210,25))self.del_affirm = wx.Button(self.pnl,label="删除",pos=(625,78),size=(80,25))#为删除按钮组件绑定事件处理self.del_affirm.Bind(wx.EVT_BUTTON,self.DelAffirm)##################################################################################创建静态框sb_del = wx.StaticBox(self.pnl,label="请选择需要删除的学生id")#创建水平方向box布局管理器hsbox_del = wx.StaticBoxSizer(sb_del,wx.HORIZONTAL)#添加到hsbox_name布局管理器hsbox_del.Add(self.del_id,0,wx.EXPAND | wx.BOTTOM,5)#添加到vsbox_show_operation布局管理器self.vsbox_show_operation.Add(hsbox_del,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)self.vsbox_show_operation.Add(self.del_affirm,0,wx.CENTER | wx.TOP | wx.FIXED_MINSIZE,5)def ClickButton(self,event):source_id = event.GetId()if source_id == 10:print("查询操作!")inquire_button = InquireOp(None,title="CSDN学生信息管理系统",size=(1024,668))inquire_button.Show()self.Close(True)            elif source_id == 11:print("添加操作!")add_button = AddOp(None,title="CSDN学生信息管理系统",size=(1024,668))add_button.Show()self.Close(True)                       elif source_id == 12:pass     elif source_id == 13:self.Close(True)def DelAffirm(self,event):#连接login_users数据库op = Sql_operation("login_users")#向stu_information表添加学生信息del_id = self.del_id.GetValue()print(del_id)np = op.Del(int(del_id))del_button = DelOp(None,title="CSDN学生信息管理系统",size=(1024,668))del_button.Show()self.Close(True)if __name__ == '__main__':app = wx.App()login = UserLogin(None,title="CSDN学生信息管理系统",size=(1024,668))login.Show()app.MainLoop()

代码中个别注释可能会在复制粘贴过程中忘记更改描述,请见谅

效果图

登录界面:

操作界面:

查看学生信息界面:

添加学生信息界面:

删除学生信息界面:

退出系统操作整个面板就关闭了。
欢迎大家提出改进意见!

wxpython+MySQL实现学生信息管理系统相关推荐

  1. 信息管理系统 github_Java+MySQL实现学生信息管理系统

    基于Java swing+MySQL实现学生信息管理系统:主要实现JDBC对学生信息进行增删改查,应付一般课设足矣,分享给大家. 源码: https://github.com/ZhuangM/stud ...

  2. 基于PHP+MySQL的学生信息管理系统(源码)

    项目名称:基于PHP+MySQL的学生信息管理系统 本系统是一个用于管理学生信息的管理系统,包括基本的增删改查,系统使用PHP语言开发,使用MySQL数据库,可以供初学者参考使用. 系统环境 MySQ ...

  3. Eclipse+Java+Swing+Mysql实现学生信息管理系统

    目录 一.系统介绍 1.开发环境 2.技术选型 3.系统功能 4.数据库 二.系统展示 1.注册系统 2.登录系统 3.系统主页面 4.添加学生信息 5.修改学生信息 6.查询学生信息 三.部分代码 ...

  4. 利用mysql做信息管理_利用MySql实现学生信息管理系统的后台数据管理

    Vol.28No.4 Apr.2012 赤峰学院学报(自然科学版)Journal of Chifeng University (Natural Science Edition )第28卷第4期(下) ...

  5. 【Java:JDBC+MySQL实现学生信息管理系统】

    此次使用Java JDBC+MySQL数据库实现一个简易的学生管理系统(没有前端界面). 目录 前言 一.数据库设计 二.Java代码编写实现 1.创建项目,引入JDBC的.jar包 2.创建连接驱动 ...

  6. (解析+源码)基于JAVA Swing+MySQL实现学生信息管理系统(增、删、改、查)数据库/文件存储

    根据学校对学生信息日常管理需要,学生信息管理系统包括以下功能: 登录系统: 新建学生信息:添加学生信息: 删除学生信息:对指定学生信息进行删除: 修改学生信息:对指定学生信息进行修改 查找学生信息:输 ...

  7. 基于PHP+MySQL的学生信息管理系统

    资源下载地址:https://download.csdn.net/download/sheziqiong/85697496 一.引言 1.1 1 设计开发的意义 学生信息档案的管理对于学校的管理者来说 ...

  8. 基于Java Swing+mysql的学生信息管理系统

    学生信息管理系统 学生管理系统目录 学生信息管理系统 一.前期工作 ①下载eclipse.mysql.navicat ②建立navicat与mysql的连接 二.明确项目的具体实现思路 ★系统功能分析 ...

  9. JAVA+MYSQL 实现学生信息管理系统

    文章目录 系统要求 实现流程 代码 系统要求 设计一个学生管理系统,能够实现简单的学生管理功能. 数据库stu包含两个表: ①user:用户表,字段为(id,password),用于实现登录功能. ② ...

最新文章

  1. 【收藏】GeoMesa Spark
  2. 初一七年级计算机信息全册教案,新川教版七年级信息技术全册教案(全册)
  3. h5封装去底部_Appium—Native+H5混合APP的自动化
  4. MapXtreme IResultSetFeatureCollection
  5. 黑客、蠕虫和网络恐怖主义简史(组图)
  6. Spring Boot整合mybatis报错Invalid bound statement (not found)
  7. 【软件网每日新闻播报│第9-20期】
  8. uboot 中内存测试,内存检测方法
  9. 《将月夜》——高宠儿
  10. openlayers 绘制动态迁徙线、曲线
  11. IE自动化(易语言填表原理分析)
  12. 深度学习算法之-SSD(一)
  13. 精心整理史上最全的数据结构flash演示动画,共5个版本,祝大家考研成功!
  14. 876链表的中间节点
  15. [转] 理解各种熵最大熵模型
  16. java语言程序设计(新手篇)
  17. 华为大连软件开发云上线,打造软件云生态,加速软件产业升级
  18. 自学Web前端开发学习讲解 – 入门篇
  19. 2020年,iOS开发面试跳槽(必看攻略)
  20. encode和decode的妙用

热门文章

  1. 《仙剑奇侠传3》仙术合集
  2. 网站做竞价推广需要注意什么呢?
  3. 旅游行业“春来早”,走着瞧旅行云南踏青游正火爆
  4. 企业微信发送图片失败
  5. Android模拟器优化加速
  6. html em加粗,HTML5 :b/strong加粗,i/em倾斜区别
  7. 数据结构与算法 学习笔记(中)
  8. 前端vue视频vue-video-player插件总结知识点案例(带源码)
  9. 差异表达基因热图怎么看_获得差异表达基因后-基因功能注释
  10. 如何用excel做正交分析_如何在SPSS中进行正交设计及正交分析?