在开始这个项目之前,我们先了解一下类变量的基础知识:

一、类变量

1. 实例变量和实例函数

静态属性 ==> 实例变量/成员变量

动态属性 ==> 实例函数(方法)/成员函数(方法)

每一份实例都有自己独立的一份数据;

对于公共的数据(对每个对象没有差异的数据),我们把它定义成实例变量是不合理的。我们只需要存储一份, 应该把它定义成类变量,所有的对象后期调用的时候直接调用类变量就可以了。这样可以提高运行速度、节约对象实例化的内存资源。

2. 类变量

类变量一般位于类名称的下面,构造函数的上面;

class Person:

count = 0 # 类变量

def __init__(self,name,age):

self.name = name # 成员变量

self.age = age

Person.count += 1

def say_hello(self): # 成员函数

print("大家好,我是"+self.name+",今年"+self.age+"岁!")

if __name__ == '__main__':

peter = Person("peter","20")

peter.say_hello()

# 想通过一个变量来记录这个类被实例化多少次

alice = Person("alice", "22")

alice.say_hello()

print(Person.count)

类变量只存储一份,存储在类空间中,在每个对象的空间中不需要存储类变量

3. 类变量的访问

在类中访问类变量: 类名.类变量名称

在对象中访问类变量:类名.类变量名称或者对象名.类变量名称

推荐:如果访问类变量,最好还是通过类名.类变量名称来进行访问。

4. 对象变量访问的顺序

如果类变量与实例变量同名,使用对象名.类变量名访问,优先访问的是实例变量。

原则:变量通过对象名.变量名的方式访问时,优先在当前对象中查找有没有该变量名,如果没有则去类空间中查找该变量名。

二、GUI 界面搭建

我们搭建一个可以统计学生人数的窗体,包括男生人数和女生人数:

from tkinter import *

from tkinter.ttk import *

import os

class StudentGUI(Tk):

def __init__(self):

super().__init__()

self.title("计算学生人数")

self.geometry("602x520+300+100")

self.resizable(0,0)

self["bg"] = "whitesmoke"

# 加载具体的界面控件

self.setuo_UI()

def setuo_UI(self):

# 设置Style

self.style01 = Style()

self.style01.configure("title.TLabel",font=("微软雅黑",25,"bold"),foreground = "navy")

self.style01.configure("TLabel", font=("微软雅黑", 18, "bold"))

# 设置Banner

self.Top_image = PhotoImage(file = "."+os.sep+"img"+os.sep+"stu_detail_banner.png")

self.Label_image = Label(self,image = self.Top_image)

self.Label_image.place(x=1,y=1)

self.Label_title = Label(self,text = "统计学生信息",style = "title.TLabel")

self.Label_title.place(x = 380,y = 20 )

# 设置统计区域

self.Label_total = Label(self,text = "总人数:")

self.Label_total.place(x=20,y=95)

self.var_total = StringVar()

self.Entry_total = Entry(self,state=DISABLED,textvariable = self.var_total,width =8,font=("微软雅黑", 18, "bold"))

self.Entry_total.place(x=90,y=90)

self.Label_man = Label(self, text="男生人数:")

self.Label_man.place(x=210, y=95)

self.var_man = StringVar()

self.Entry_man = Entry(self,state=DISABLED,textvariable = self.var_man,width=8,font=("微软雅黑", 18, "bold"))

self.Entry_man.place(x=300, y=90)

self.Label_woman = Label(self, text="女生人数:")

self.Label_woman.place(x=410, y=95)

self.vat_woman = StringVar()

self.Entry_woman = Entry(self,state=DISABLED,textvariable = self.vat_woman,width=8,font=("微软雅黑", 18, "bold"))

self.Entry_woman.place(x=500, y=90)

# 加载表格

self.Tree = Treeview(self,columns=("sno","name","gender","birthday","mobile"),show="headings",height = 20)

self.Tree.column("sno",width=120,anchor="center")

self.Tree.column("name",width=90,anchor="center")

self.Tree.column("gender",width=90,anchor="center")

self.Tree.column("birthday",width=130,anchor="center")

self.Tree.column("mobile",width=150,anchor="center")

self.Tree.heading("sno",text="学号")

self.Tree.heading("name", text="姓名")

self.Tree.heading("gender", text="性别")

self.Tree.heading("birthday", text="出生日期")

self.Tree.heading("mobile", text="手机号码")

self.Tree.place(x=10,y=130)

if __name__ == '__main__':

this_gui = StudentGUI()

this_gui.mainloop()

显示效果:

屏幕快照 2020-08-16 下午9.49.42.png

三、实现数据统计的功能

前面的界面我们已经搭建好啦,现在我们要写一个student模块来实现数据统计的功能。

学生列表、男生人数、女生人数,我们将其作为类变量存储在Student类中,我们定义一个load_student函数用来读取文件中的学生信息,并实现男生女生人数的统计功能

def load_student(self):

try:

# 读取文件

with open(file = Student.file_path,mode="r",encoding="UTF-8") as fd:

# 逐行读取

current_line = fd.readline()

while current_line:

student_info = current_line.split(",")

# 判断男女

if student_info[2] == "男":

Student.male_number += 1

else:

Student.female_number += 1

# 把当前学生添加到类变量student_list[]中

Student.student_list.append(student_info)

# 读取下一行

current_line = fd.readline()

except:

showinfo("系统消息","读取消息出现异常!")

为了防止每次实例化这个类的时候,类变量收到干扰;我们定义一个机制:在Student类的构造方法中,在调用load_student方法前先判断一下,如果类变量student_list数据为空,则需要导入,否则不导入数据。

def __init__(self):

if len(Student.student_list) == 0:

self.load_student()

四、完成GUI界面数据的加载

现在我们把GUI与后台的功能做一个整合,这里我们定义一个控制程序start.py,作为程序的入口;

import studentgui

if __name__ == '__main__':

this_window = studentgui.StudentGUI()

this_window.mainloop()

现在已经可以从程序入口打开GUI了,但是还没有显示人数、表格中的数据也没有显示。所以我们需要在studentgui中再添加一个load_student_info函数,将功能函数获取到结果加载到GUI界面中。这里主要做两件事:

1. 填充人数

先实例化操作学生的类,

this_student = student.Student()

没有实例变量,实例化还有什么用?实际上,如果不实例化的话,Student类中的数据是无法导入到StudentGUI中来用的。

实例化完成后,在StudentGUI中直接给显示学生人数的变量设置值即可:

self.var_man.set(student.Student.male_number)

self.var_woman.set(student.Student.female_number)

self.var_total.set(int(student.Student.male_number)+int(student.Student.female_number))

2. 导入数据到表格

给GUI界面的TreeView表格填充数据,填充之前先将TreeView清空:

for i in self.Tree.get_children():

self.Tree.delete(i)

然后判断传递过来的student_list里是否有数据,如果没有数据则弹出警示框,有数据则使用insert方法逐行插入数据:

if len(student.Student.student_list) == 0:

showinfo("系统消息","没有数据加载")

else:

# 获取student.Student.student_list的数据

list_student = student.Student.student_list

# 遍历list_student逐条插入

for index in range(len(list_student)):

self.Tree.insert("",index,values=(

list_student[index][0],list_student[index][1],list_student[index][2],

list_student[index][3],list_student[index][4]))

至此,我们的项目已经基本完成了

显示效果

4.gif

python if统计人数_(三)Python GUI实战:统计学生人数相关推荐

  1. python 计算累计人数_免费Python入门课程,看到就是赚到~

    前言 人生苦短,我用python.当下最火的编程语言,你是否也想试试? Python发行于1991年,广泛应用于系统管理任务的处理和WEB编程.创始人阿姆斯特丹Guido为了打发圣诞节的无趣,决心开发 ...

  2. python 代码行数统计工具_使用Python设计一个代码统计工具

    问题 设计一个程序,用于统计一个项目中的代码行数,包括文件个数,代码行数,注释行数,空行行数.尽量设计灵活一点可以通过输入不同参数来统计不同语言的项目,例如: # type用于指定文件类型 pytho ...

  3. python词频统计西游记_实例10-文本词频统计.pdf

    Python语言程序设计 实例10: 文本词频统计 嵩 天 北京理工大学 "文本词频统计"问题分析 CC BY-NC-SA 4.0 嵩天 问题分析 文本词频统计 - 需求 :一篇文 ...

  4. python词频统计代码_机器学习必备宝典-《统计学习方法》的python代码实现及课件...

    <统计学习方法>可以说是机器学习的入门宝典,许多机器学习培训班.互联网企业的面试.笔试题目,很多都参考这本书.本站根据网上资料用python复现了课程内容,并提供本书的代码实现.课件下载. ...

  5. python调用matlab函数_从 Python 调用 MATLAB 函数的三种方法

    0. 实验环境Ubuntu 16.04 Matlab R2015b 1. 借助于 mlab 库 安装方法非常简单,只需一行命令 sudo pip install mlab 即可. import num ...

  6. 基于python的语料库数据处理_基于Python的语料库数据处理(三)

    原标题:基于Python的语料库数据处理(三) <Python玩转语料库数据>专栏· 第3篇 1393 字 | 5 分钟阅读 一起来学习用Python进行语料库数据处理吧! 一.条件判断 ...

  7. python列表平均值函数_如何计算列表的平均值-统计信息和Python的均值函数详细解释

    python列表平均值函数 Mathematics and programming go hand in hand. If you are a programmer, at some point yo ...

  8. pythonif循环_三. python 循环if,while,for....

    一 .if流程控制语句 if语句: 格式: if表达式: 语句 1. if语句 #练习if语句 aa=int(input("请你输入一个数是否是奇偶:"))if aa%2==0:p ...

  9. python中成绩分析函数_自学Python笔记:用Python做成绩分析(1)

    有朋友会问,刚学了一周,什么是面向对象都还不清楚就可以写程序?还有Python不是写"爬虫"吗? Python是面向对象的语言,函数.模块.数字.字符串都是对象,并且完全支持继承. ...

  10. python 科学计算设计_《Python科学计算-(第2版)》怎么样_目录_pdf在线阅读 - 课课家教育...

    第1章 Python科学计算环境的安装与简介 1 1.1 Python简介 1 1.1.1 Python 2还是Python 3 1 1.1.2 开发环境 2 1.1.3 集成开发环境(IDE) 5 ...

最新文章

  1. 2005年下半年 网络工程师 上下午试卷【附带答案】
  2. tomcat cpu占用过高,系统负载高问题跟踪
  3. tensorflow就该这么学--3
  4. 四种连接数据库的方法(DriverManager、DataSource子类、DBCP、c3p0)
  5. 2019年末逆向复习系列之Boss直聘Cookie加密字段__zp_stoken__逆向分析
  6. 机器学习 | 距离计算
  7. 动态规划——基本思想
  8. 在死循环中使用Scanner获得键盘输入
  9. matlab cond函数
  10. 毕业设计--20200228--内网搭建domoticz系统 frp内网穿透实现天猫精灵控制内网设备
  11. 回忆过去,畅想未来--2016下
  12. 爬虫:动态页面爬取Selenium
  13. 00 石锅土鲫鱼项目导语
  14. 格里高利时转儒略日计算公式
  15. flash在线视频播放器
  16. 关于有偿提供拼图响应式后台的通知
  17. 常用到的Eclipse快捷键
  18. 【推荐系统】基于协同过滤的图书推荐系统
  19. 用python做图片搜索引擎并保存到本地
  20. 熟练掌握R语言的Meta分析全流程和不确定性分析,并结合机器学习等方法讲解Meta分析在文献大数据的延伸应用

热门文章

  1. iOS开发 宏定义,Pch文件的引入以及Header文件和Pch一起的使用方法(不用一直引入相同的头文件了,让你的开发更加快捷)
  2. Leetcode Hot-100
  3. 儿童智能手环方案/案列/APP/小程序/网站
  4. 面试准备:计算机网络常见面试题
  5. Dell电脑插入耳机没反应 解决办法
  6. qt textbrowser的边界框怎样改变颜色_专访天使投资人续沛川:用深度思考打破人生边界,拥有张力一生...
  7. .net 生成拼音码与五笔码
  8. 思科模拟器 --- 扩展IP访问控制列表配置
  9. 少儿计算机基础知识,学会这三个小知识,轻松入门少儿编程
  10. C语言将CSR存储模式转为coo,spmv_csr 稀疏矩阵的DIA/ELLPACK/COO/CSR/HYB表示形式 - 下载 - 搜珍网...