Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)

文章目录

    • 1.EasyGui的安装
    • pip安装(python 3.7版本及其之前版本):
    • python 3.7以上版本
    • 手动安装:
    • 2.EasyGui简单使用
    • 窗口属性修改
    • 3.简单实战
    • 窗口猜数字游戏
    • 实现一个用于登记用户账号信息的界面(如果是带 * 号的必填项,要求一定要有输入并且不能是空格)
    • 提供一个文件夹浏览框,让用户选择需要打开的文本文件,打开并显示文件内容。当用户点击“OK”按钮的时候,比较当前文件是否修改过,如果修改过,则提示“覆盖保存”、”放弃保存”或“另存为…”并实现相应的功能
    • 统计你当前代码量的总和,并显示离十万行代码量还有多远?

1.EasyGui的安装

pip安装(python 3.7版本及其之前版本):

打开cmd输入安装:

pip install easygui

如果提示
WARNING: You are using pip version 19.2.3, however version 20.2.1 is available.

更新pip:
只需要在cmd输入命令:python -m pip install --upgrade pip

python 3.7以上版本

可能由于python版本太高导致pip无法更新
解决pip更新问题.WARNING: You are using pip version 19.2.3, however version 20.2.1 is available.

手动安装:

首先在Github上下载EasyGui源码
Github-EasyGui

无法访问外网的可以在我的主页里资源哪里去找。

或者百度网盘地址:
链接:https://pan.baidu.com/s/1uDp7qRQnAxwv_XO4W9vdeQ
提取码:Nucd

安装解压后打开cmd
进入解压后的文件夹中
Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)_第1张图片使用python调用setup.py后面跟install选项

如果设置过环境变量,直接
python setup.py install
下载完关闭即可
Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)_第2张图片

2.EasyGui简单使用

import easygui

easygui.msgbox("Hello")

#或者
import easygui as Box #取别名

Box.msgbox("Hello")

Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)_第3张图片

窗口属性修改

找到Python下载文件夹下我这里是下载到E盘了
E:\python\Lib\site-packages\easygui-0.98.2-py3.9.egg\easygui\boxes
这个文件夹下都是窗口配置文件
Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)_第4张图片
这里修改choice_box.py
Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)_第5张图片

Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)_第6张图片
修改了窗口宽度与高度

3.简单实战

窗口猜数字游戏

import easygui as Box
import random

Box.msgbox("猜数字游戏开始","Dodamce")

secret=random.randint(1,10)#生成1到10随机数

msg="请输入要猜的数字(1-10):"
title="猜数字游戏"
guss=Box.integerbox(msg,title,lowerbound=1,upperbound=10)
#integerbox(msg='', title=' ', default=None, lowerbound=0, upperbound=99, image=None, root=None)
#integerbox() 为用户提供一个简单的输入框,用户只能输入范围内(lowerbound 参数设置最小值,upperbound 参数设置最大值)的整型数值,否则会要求用户重新输入。
#返回值为用户输入的字符串。
while True:
    if guss==secret:
        Box.msgbox("猜对了!")
        break
    else:
        if guss>secret:
            Box.msgbox("猜大了")
        else:
            Box.msgbox("猜小了")
        guss=Box.integerbox(msg,title,lowerbound=1,upperbound=10)

Box.msgbox("退出游戏")

Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)_第7张图片

实现一个用于登记用户账号信息的界面(如果是带 * 号的必填项,要求一定要有输入并且不能是空格)

import easygui as Box

msg="请填写下列信息"
title="账号中心"

DateName=["*用户名","*真实姓名","*电话"," 固定电话"," QQ","*邮箱"]

DateValue=Box.multenterbox(msg,title,DateName)
#multenterbox(msg='Fill in values for the fields.', title=' ', fields=[], values=[], callback=None, run=True)
#multenterbox() 为用户提供多个简单的输入框,要注意以下几点:
#如果用户输入的值比选项少的话,则返回列表中的值用空字符串填充用户为输入的选项。
#如果用户输入的值比选项多的话,则返回的列表中的值将截断为选项的数量。
#如果用户取消操作,则返回域中的列表的值或者 None 值。

while True:
    if DateValue ==None:
        break
    TxTMsg=""
    for i in range(len(DateName)):#访问每一个标题
        option=DateName[i].strip()#strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
        if DateValue[i].strip()=="" and option[0]=="*":
            TxTMsg+=("[%s]为必填项。\n\n"%DateName[i])
    if TxTMsg=="":#说明所有的必填项都有了数据
        break
    #用之前的值再画一个窗口
    DateValue=Box.multenterbox(TxTMsg,title,DateName,DateValue)

print("用户资料为:%s"%str(DateValue))

Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)_第8张图片

提供一个文件夹浏览框,让用户选择需要打开的文本文件,打开并显示文件内容。当用户点击“OK”按钮的时候,比较当前文件是否修改过,如果修改过,则提示“覆盖保存”、”放弃保存”或“另存为…”并实现相应的功能

buttonbox(msg=’’, title=’ ', choices=(‘Button[1]’, ‘Button[2]’, ‘Button[3]’), image=None, images=None, default_choice=None, cancel_choice=None, callback=None, run=True)

可以使用 buttonbox() 定义自己的一组按钮,buttonbox() 会显示一组由你自定义的按钮。

当用户点击任意一个按钮的时候,buttonbox() 返回按钮的文本内容。

如果用户点击取消或者关闭窗口,那么会返回默认选项(第一个选项None)

#-*-coding:GBK -*- 

import easygui as Box
import os

FilePath=Box.fileopenbox(default="*.txt")
#fileopenbox(msg=None, title=None, default='*', filetypes=None, multiple=False)
#fileopenbox() 函数用于提供一个对话框,返回用户选择的文件名(带完整路径),如果用户选择 “Cancel” 则返回 None。
#默认显示所有txt文件

with open(FilePath,encoding='gbk',errors='ignore') as File:#with语句,自动关闭文件等操作
    title=os.path.basename(FilePath)#返回文件名
    msg="文件[%s]内容为:"%title
    text=File.read()
    text_after=Box.textbox(msg,title,text)
#textbox(msg='', title=' ', text='', codebox=False, callback=None, run=True)
#textbox() 函数默认会以比例字体(参数 codebox=True 设置为等宽字体)来显示文本内容(自动换行),这个函数适合用于显示一般的书面文字。

if text !=text_after[:-1]:#b = a[:-1]表示从a的第一个元素复制到最后一个元素之前给b
    choice = Box.buttonbox("检测到文件内容发生改变,请选择以下操作:", "警告", ("覆盖保存", "放弃保存", "另存为..."))
    if choice =="覆盖保存":
        with open(FilePath,'w',encoding='gbk',errors='ignore') as File:
            File.write(text_after[:-1])
    if choice =="放弃保存":
        pass #当你不清楚要写的内容时,就可以用pass来进行填坑。
    if choice =="另存为...":
        NewPath=Box.filesavebox(default=".txt")
#filesavebox(msg=None, title=None, default='', filetypes=None)
#filesavebox() 函数提供一个对话框,让用于选择文件需要保存的路径(带完整路径),如果用户选择 “Cancel” 则返回 None。
        if os.path.splitext(NewPath)[1]!=".txt":
            NewPath+=".txt"
        with open(NewPath,'w',encoding='gbk',errors='ignore') as NewFile:
            NewFile.write(text_after[:-1])

统计你当前代码量的总和,并显示离十万行代码量还有多远?

  • 递归搜索各个文件夹
  • 显示各个类型的源文件和源代码数量
  • 显示总行数与百分比

diropenbox(msg=None, title=None, default=None)

diropenbox() 函数用于提供一个对话框,返回用户选择的目录名(带完整路径),如果用户选择 “Cancel” 则返回 None。

default 参数用于设置默认的打开目录(请确保设置的目录已存在)。

import easygui as Box
import os

target=[".c",".cpp",".py",".cc",".java"]

File={}#空索引
Line={}

def PrintResult(Path):
    lines=0
    total=0
    text=""
    for Type in Line:
        lines=Line[Type]
        total+=lines
        text+="[%s]文件%d个,代码%d行\n"%(Type,File[Type],lines)
    title="统计结果"
    msg="一共编写了%d行代码,完成进度:%.2f %%\n离10万行代码还差%d行!"%(total,total/1000,100000-total)
    Box.textbox(msg,title,text)
    
        

def CoutLine(FileName):
    lines=0
    with open(FileName) as File:
        print("正在统计%s文件......"%FileName)
        try:
            for eachLine in File:
                lines+=1
        except UnicodeDecodeError:
                pass #如果遇到了奇怪文件,忽略
    return lines


def SearchFile(Path):
    os.chdir(Path)#更改工作目录
    for eachFile in os.listdir(os.curdir):#目录下所有文件
        Type=os.path.splitext(eachFile)[1]
        if Type in target:
            lines=CoutLine(eachFile)#统计文件内的行数
            #统计文件数
            try:#如果字典中不存,抛出 KeyError,则添加字典键
                File[Type]+=1
            except KeyError:
                File[Type]=1
            #统计代码行数
            try:
                Line[Type]+=lines
            except KeyError:
                Line[Type]=lines
        if os.path.isdir(eachFile):#是文件夹
            SearchFile(eachFile)
            #递归结束后工作目录回到上一级目录
            os.chdir(os.pardir)

#主函数
Box.msgbox("请打开要统计的文件夹!","统计代码量")

Path=Box.diropenbox("请选择要统计的代码库")

SearchFile(Path)

PrintResult(Path)

Python_EasyGui图形化的安装,配置窗口,简单实战(登录界面,猜数字游戏,模拟记事本,统计代码量)_第9张图片
可能会存在打不开文件夹的情况。

你可能感兴趣的:(python,python,游戏,开发语言)