python新手入门学习记录23msgbox()multenterbox()fileopenbox()diropenbox()textbox()buttonbox()filesavebox()

Posted 尚墨1111

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python新手入门学习记录23msgbox()multenterbox()fileopenbox()diropenbox()textbox()buttonbox()filesavebox()相关的知识,希望对你有一定的参考价值。

写在前面的话

写了一上午,一不小心关闭了页面,所有都没了。。。。。 胡乱重写了一部分,还是让我静一静。。痛哭、、、、引以为戒啊

1、实现登记用户信息界面,其中带星号的为必填项不能为空或者不能为空格

import easygui as g
msg = '【*真实姓名】为必填项。\\n【*手机号码】为必填项。\\n【*E-mail】为必填项。'
title = '账号中心'
fieldNames = ['*用户名','*真实姓名','固定电话','*手机号码','QQ','*E-mail']
fieldValues = g.multenterbox(msg , title , fieldNames)
for i in range(len(fieldNames)):
   if '*' in fieldNames[i]:					#判断为空的似乎有问题
        if fieldValues == []:
            g.msgbox('带*号的为必填项,请重新填写')
            break

import easygui as g
msg = '【*真实姓名】为必填项。\\n【*手机号码】为必填项。\\n【*E-mail】为必填项。'
title = '账号中心'
fieldNames = ['*用户名','*真实姓名','固定电话','*手机号码','QQ','*E-mail']
fieldValues = []
fieldValues = g.multenterbox(msg , title , fieldNames)					#如果没有输入就会进入循环
while 1:
    if fieldValues == None:								
        break
    errmsg = ''
    for i in range(len(fielddNames)):
        option = fieldNames[i].strip()  								#strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列
        if fieldValues[i].strip() == '' and option[0] == '*':			#带星号的输入为空
            errmsg += ('【%s】为必填项。\\n\\n' % fieldNames[i])
     if errmsg == '':
         break
     fieldValues = g.multenterbox(errmsg,title,fieldNames,fieldValues)		#循环后进行保存,并提示某项必填
print('用户资料如下%s ' % str(fieldValues))

运行:
>>>用户资料如下['effreg', 'crgth', 'vSVS', 'cA', 'cas', 'vFDSG'] 

2、递归搜索文件夹

import os

allfile = []
def get_all_file(path):
  allfilelist = os.listdir(path)
  for file in allfilelist:
    filepath = os.path.join(path, file)
    # 判断是否是文件夹
    if os.path.isdir(filepath):
      get_all_file(filepath)
    # 是文件就将路径添加到列表
    allfile.append(filepath)
  return allfile

path = 'E:/Git仓库'
allfiles = get_all_file(path)

for item in allfiles:
print(item)

3、提供文件夹浏览框,让用户选择文本文档,打开并显示文本

import easygui as g
import os

filePath=g.fileopenbox('.txt')
#此处根据实际情况,进行字符编码设计
with open(filePath) as f:
    title=os.path.basename(filePath)
    msg='文件%s的内容如下:'%title
    txt=f.read()
    g.textbox(title,msg,txt)

4、在3的基础上,当用户点击“OK”按钮的时候,比较当前文件是否被修改过,如果修改过,则提示“覆盖保存”、“放弃保存”或“另存为”并实现其功能

import easygui as g
import os
file_path = g.fileopenbox(default="e:/pathonaaa/a/")
with open(file_path) as old_file:
        title = os.path.basename(file_path)
        msg="文件【%s】的内容如下:" % title
        text = old_file.read()
        text_after = g.textbox(msg,title,text)		#注意textbox()打开后会自动在文末加上‘\\n’,要去掉
if text != text_after[:-1]: 			
        choice = g.buttonbox("检测到文件内容发生改变,请选择以下操作:","警告",("覆盖保存","放弃保存","另存为"))
        if choice == "覆盖保存":
                with open(file_path,"w") as old_file:
                        #以新写入的方式打开当前的文件#
                        old_file.write(text_after)
                        #覆盖写入#
                        
        if choice == "放弃保存":
                pass
                
        if choice == "另存为":
                another_path = g.filesavebox(default=".txt")
                #先确定了新文件的路径#
                if os.path.splitext(another_path)[1] !=".txt":
                        #如果新的文件没有保存成txt文件的话#
                        another_path +=".txt"
                        #那就在屁股上加上.txt#
                with open(another_path,"w") as new_file:
                        new_file.write(text_after)

5、统计代码量,显示离10W行代码还有多远,递归搜索各个文件夹,显示各个类型的源文件和源代码数量,显示总行数与百分比

import os
import easygui as g

#查找文件
def find_file(file_path,target):
    os.chdir(file_path)
    all_files=os.listdir(os.curdir)
    for each in all_files:
        #print(each)
        fext=os.path.splitext(each)[1]
        if fext in target:
            lines=calc_code(each) #统计行数
            #print("文件%s的代码行数是%d"%(each,lines))
            #统计文件数
            try:
                file_list[fext]+=1
            except KeyError:
                file_list[fext]=1
            #统计源代码行数
            try:
                source_list[fext] += lines
                #print(source_list[fext])
            except KeyError:
                source_list[fext] = lines
                #print(source_list[fext])



        if os.path.isdir(each):
            find_file(each,target) # 递归调用
            os.chdir(os.pardir) #返回上层目录


#统计行数
def calc_code(file_name):
    lines=0
    with open(file_name,encoding='gb18030',errors='ignore') as f:
        print("正在分析文件%s..."%file_name)
        try:
            for eachline in f:
                lines += 1
        except UnicodeDecodeError:
            pass
        print("文件%s分析完毕,包含代码行%d." %(file_name,lines))
    return lines


#显示结果
def show_result(start_dir):
    lines=0
    total=0
    text=''

    for i in source_list:
        lines=source_list[i]
        total+=lines
        text+='%s源文件%d个,源代码%d行\\n'%(i,file_list[i],lines )

    title='统计结果'
    msg='目前代码行数:%d\\n完成进度:%.2f%%\\n距离十万行代码还差%d行'%(total,total/1000,100000-total)
    g.msgbox(msg,title,text)

target=['.py','.java','.c','.cc','.cpp']  #定义需要查找的源文件类型
file_list=
source_list=
g.msgbox('请打开您的文件夹','统计代码量')
path=g.diropenbox('请选择您的代码库:')

find_file(path,target)
show_result(path)

以上是关于python新手入门学习记录23msgbox()multenterbox()fileopenbox()diropenbox()textbox()buttonbox()filesavebox()的主要内容,如果未能解决你的问题,请参考以下文章

Python 图形化编程入门--交互模式

2019-04-10 python入门学习——教材和工具准备

python入门学习记录

Python入门基础学习记录汇率案例学习记录

python:Easy Gui之常用操作

Python3.5入门学习记录-条件控制