手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

这篇具有很好参考价值的文章主要介绍了手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【声明】这篇文章可能写的很差,作者技术不够。但是一定原创,一定用最简单的语言,最详细的描述让没有经验的读者能够懂得

【首言】exe是电脑上直接点击就可以使用的。当你写了一个.py文件,可以实现你的有趣功能,于是你高兴的把这个发送给你的朋友,但是你的朋友没有ptyhon环境(环境:idle,指python基本的软件。或者有python这个软件,但是你的程序需要用到某个模块,比如pygame(模块是指前辈们写好的,可以直接下载后运用某些简单的命令实现厉害的功能,比如pygame可以制作游戏,设置窗口,加载图片,音乐等等)所以我们需要打包成exe文件,这样不管别人的电脑有没有python,都可以点击直接运行。

一,打包介绍:

实现打包的也是一个模块,名字 pyinstaller ,安装即可

可以在桌面按下[win]键+R键 输入cmd进入cmd。输入命令 pip install pyinstaller回车 

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

                                      ​​​​    ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        

完成后输入pip list可以查看已安装的模块目录

pycharm可以点击file--setting--project。点这里的加号添加该pyinstaller模块

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

 打包实例

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

二, 打包演示:

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

这是一个非常简单但效果明显的例子。引用pyttsx3模块(可以用来发出声音,方便测试,并且该模块需要自行下载,更加验证其可执行性)

好了,我们来到mai.py所在的文件夹

 手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

 点击这里,输入cmd就进入了此文件夹的cmd空间,你会发现默认行前面增加了文件位置前缀,

就像python打开txt文档,如果是同级文件夹进行,只需要txt的名字即可。否则需要txt的绝对地址(c/user/……)

进入cmd后,输入 pyinstaller -F mai.py (改成py文件的名字)

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

 提示成功打包,

 手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

 多了这些文件,dist文件夹里有个exe,点击就可以运行。其他的文件没用可删

注意点:

1,有可能windows系统把程序当成病毒删了或者不让打开,在右下角安全中心选择操作--允许出现在设备上即可

2,pyinstaller -F -w -i xxx.ico xx.py命令可以改变图标,需要一个图标网站,将心仪的图片转化为ico图标文件(自行更改后缀名不管用)

3,打包内存大小可能很大,主要是打包类似于将你所需要的模块一起打包进去,又可能打包了一些无用模块,再加上他自身必须要用一部分位置。不太容易解决此问题

4,打包后import引用的模块可以直接使用。如果在代码行增加如下代码

try:
    f=open("add.txt", "r", encoding="utf-8").read()    # 读取add文档里的内容,以兼容中文的方式(encoding=utf-8)
    exec(f)    # 这个是成段的eval
except:
    pass            # 如果代码中有错就跳过

 这样你只需要更改add.txt的内容就可以更改exe程序的作用。如果你想更改某功能,只需要发给朋友一个add.txt,几kb即可解决,而不需要重新发送30MB的软件

三,填充文字实例:

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

 普通窗口打包点击是这样的窗口,看着不太好看。运用tkinter模块即可美化(教程很多)

这样就好看一些(如下)

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

 有朋友的作业是打印输出自己的名字,用*号填充,手写太累

可以先写在名字截图,在ppt中插入图片调整透明度,然后文字框写入 *

更为高级的方法是:pil可以读取每个像素点的颜色,如果是黑就填充

import tkinter as tk                   # 界面设计模块
from tkinter import filedialog         # 选择图片模块
from PIL import ImageFont              # 图片操作
from PIL import Image
from PIL import ImageDraw
import pyperclip                       # 复制到剪切板模块

首先导入模块,最后一个模块用于把结果粘贴到剪切板上,更为方便

这是将字转换为填充段的函数

 

 手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

 

这是把文字缩写的函数,因为在python中,字符串可以相加,可以和数字相乘来重复

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

 

 核心函数已经构建,接下来就是界面设计

置顶,透明度,大小,背景,按钮,标签,输入框统统安排上

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

按钮执行的函数,非常简单。这个是直接复制文段函数。

我们读取三个文本框的内容,如果格式正确就进行全局变量(文字,字号,填充)的更改

否则背景标红以示警告。随后运行核心函数1.复制到剪切板即可。

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

 

三.1,代码:

import tkinter as tk                   # 界面设计模块
from tkinter import filedialog         # 选择图片模块
from PIL import ImageFont              # 图片操作
from PIL import Image
from PIL import ImageDraw
import pyperclip                       # 复制到剪切板模块


goal_strs = "张三"
word_size = 80
fill_item = "*"


def get_s():
    font = ImageFont.truetype("simhei.ttf", word_size)              # 写字的字体,字号
    im1 = Image.new('RGB', (len(goal_strs)*word_size, word_size), (255, 255, 255))       # 建立新图, 白底
    draw = ImageDraw.Draw(im1)                             # 写字函数
    draw.text((0, 0), goal_strs, (0, 0, 0), font=font)     # 写字,黑色

    img = im1.convert("L")
    size_x, size_y = img.size
    img = img.resize((size_x, int(size_y/2)))              # 由于最后字,每行有行间距,为了看起来正常,所以高度减半

    pix = img.load()                                       # 加载我们刚刚制作的图
    ss = ""
    for n in range(int(word_size/2)):
        for m in range(word_size*len(goal_strs)):          # 两次循环 找到整张图的每一个点
            nt = pix[m, n]                                 # 这个点对应的值
            try:
                if nt > 100:                               # 单通道结构(每个点:0-255)
                    ss += " "                              # 白色空格
                else:
                    ss += "*"                              # 黑色*号 之所以运用一个范围是可能那个点不是完全黑或者完全白
            except:
                if nt[0] > 100:                            # 多通道结构(每个点:(25, 125, 87))
                    ss += " "
                else:
                    ss += "*"

        ss += "\n"
    img.close()
    return ss                                               # 这个函数即是把给的字以这个字号填充


def str_transform_to_print_str(orig_str: str):
    srt = orig_str
    list1 = srt.split(sep="\n")                              # 按行分为列表
    list1.remove("")                                         # 减去最后一个空列表,防止后面报错
    final_str = ""
    for line_str in list1:
        s0 = line_str[0]                                     # 这是当前循环字
        ct = 1                                               # 计数
        for s in line_str[1::]:
            if s == s0:                                      # 如果这个字还是一样的,那么count+1
                ct += 1
            else:
                final_str += "{}*'{}'+".format(ct, s0)       # 否则整体加上已经重复的次数*字符,并且计数清零,字符更改
                s0 = s
                ct = 1

        final_str += "'\\n'+"
    final_str = final_str[0:-1]                             # 最后一个是加号
    return final_str


def fun1():
    tag1.config(bg="white")
    tag2.config(bg="white")
    tag3.config(bg="white")
    global goal_strs, word_size, fill_item
    count = 1
    if len(ent1.get()) > 0:
        goal_strs = ent1.get()
        count += 1
    else:
        tag1.config(bg="red")

    try:
        word_size = int(ent2.get())
        count += 1
    except:
        tag2.config(bg="red")

    if len(ent3.get()) == 1:
        fill_item = ent3.get()
        count += 1
    else:
        tag3.config(bg="red")

    if count == 4:
        next_str = get_s()
        pyperclip.copy(next_str)
        goal_strs, word_size, fill_item = "张三", 80, "*"


def fun2():
    tag1.config(bg="white")
    tag2.config(bg="white")
    tag3.config(bg="white")
    global goal_strs, word_size, fill_item
    count = 1
    if len(ent1.get()) > 0:
        goal_strs = ent1.get()
        count += 1
    else:
        tag1.config(bg="red")

    try:
        word_size = int(ent2.get())
        count += 1
    except:
        tag2.config(bg="red")

    if len(ent3.get()) == 1:
        fill_item = ent3.get()
        count += 1
    else:
        tag3.config(bg="red")

    if count == 4:
        next_str = get_s()
        fin_str = str_transform_to_print_str(next_str)
        pyperclip.copy(fin_str)
        goal_strs, word_size, fill_item = "张三", 80, "*"


def fun3():
    open_name = filedialog.askopenfilename(title='待处理 请选择', initialdir=r'D:\a', filetypes=[("", ".jpg")])
    img = Image.open(open_name)
    img = img.convert("L")
    size_x, size_y = img.size
    img = img.resize((size_x, int(size_y / 2)))

    pix = img.load()
    ss = ""
    for n in range(int(word_size / 2)):
        for m in range(word_size * len(goal_strs)):
            nt = pix[m, n]
            try:
                if nt > 100:
                    ss += " "
                else:
                    ss += "*"
            except:
                if nt[0] > 100:
                    ss += " "
                else:
                    ss += "*"

        ss += "\n"
    pyperclip.copy(ss)


root = tk.Tk()
root.attributes("-topmost", 1)
root.attributes("-alpha", 0.7)
root.geometry("400x300")
tk.Canvas(height=300, width=400, background="white").place(x=0, y=0)
root.resizable(False, False)

tag0 = tk.Label(text="提示:结果在剪切板", bg="white", font=2)
tag0.place(x=100, y=230)

tag1 = tk.Label(text="          输入:文字(勿多)          ", bg="white")
tag1.pack(pady=5)
ent1 = tk.Entry(width=20)
ent1.insert(0, "张三")
ent1.pack(pady=5)

tag2 = tk.Label(text="          输入:字号(整数)          ", bg="white")
tag2.pack(pady=5)
ent2 = tk.Entry(width=20)
ent2.insert(0, "50")
ent2.pack(pady=5)

tag3 = tk.Label(text="          输入:填充(单个)          ", bg="white")
tag3.pack(pady=5)
ent3 = tk.Entry(width=20)
ent3.insert(0, "*")
ent3.pack(pady=5)

bu1 = tk.Button(text="{}点击开始{}".format(30*" ", 30*" "), command=fun1)
bu1.pack(pady=10)
bu2 = tk.Button(text="{}获取简写{}".format(30*" ", 30*" "), command=fun2)
bu2.pack(pady=10)
bu3 = tk.Button(text="选择图片\n简单线条", command=fun3)
bu3.place(x=20, y=40)

root.mainloop()

手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字

实验打包成功,点击可用

欢迎指正讨论,请勿喷人文章来源地址https://www.toymoban.com/news/detail-427690.html

到了这里,关于手把手教python打包exe,打包一个简易的小程序。tkinter,python初学者。编程初学者作业:用*填充出自己的名字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手教你如何使用Unity搭建简易图片服务器

    目录 引言 服务器 WAMP简介 WAMP的配置与使用 主要的WAMP集成环境有: 正文 1、外部工具素材准备 首先下载并安装 WAMP  图片路径设置 2、创建 Unity 工程 将图片加载到 Unity 项目中: 代码块 运行效果如下: 网络游戏中,服务器的搭建尤为重要,无论是授权服务器,还是非授权服务

    2024年02月02日
    浏览(38)
  • 解决pyinstaller打包文件过大问题,手把手教学

    1.首先需要在Pycharm创建一个虚拟环境,如图:  2.第二步创建我们自己的虚拟环境,如图,我这里将我的环境命名为myworkspace,然后它会自动创建一个venv文件,这里面就包含了我们的一些依赖包,接下来点击create就行:  3.第三步点击create之后,我们再点击new window,打开我们的虚拟

    2024年02月14日
    浏览(38)
  • 【python】我用python写了一个可以批量查询文章质量分的小项目(纯python、flask+html、打包成exe文件)

    web 效果预览: 先去质量查询地址:https://www.csdn.net/qc 输入任意一篇文章地址进行查询,同时检查页面,在Network选项下即可看到调用的API的请求地址、请求方法、请求头、请求体等内容: 请求头里面很多参数是不需要的,我们用 ApiPost 这个软件来测试哪些是必要参数。 经过

    2024年02月13日
    浏览(25)
  • 手把手实现一个lombok

    什么是JSR ? JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。 有超过300的JSR。一些更为明显的JSRs包括: 的JSR# 规格或技术 1 实时规范为Jav

    2023年04月23日
    浏览(34)
  • 手把手教你完成一个Python与OpenCV人脸识别项目(对图片、视频、摄像头人脸的检测)超详细保姆级记录!

    课程来源: 一天搞定人脸识别项目!学不会up直接下跪!(python+opencv)_哔哩哔哩_bilibili 环境配置详见: 在conda虚拟环境中安装OpenCv并在pycharm中使用_conda虚拟环境安装opencv_好喜欢吃红柚子的博客-CSDN博客 目录 一、读取图片 1.1 imshow和WaitKey方法   1.2 代码实现 1.3 效果展示 

    2024年02月03日
    浏览(26)
  • 手把手搭建一个压测脚本

    1. 背景         在业务开发完成,并且功能测试也正常,接下来就需要接口性能进行测试,也叫压力测试,即对接口进行极限施压,找到接口瓶颈。对于一般接口,需保证请求的耗时在 300ms 左右最后,但一些接口涉及的业务逻辑复杂,导致耗时严重,并且用户请求量也大

    2024年02月13日
    浏览(45)
  • 手把手教你如何把vue项目打包后部署到服务器(小白教程)

    一.需要用到的工具 vscode 下载链接:Visual Studio Code - Code Editing. Redefined FinalShell 下载链接:FinalShell官网 二.打包步骤 1.vscode打开你的vue项目-- 点终端 -- 输入npm run build 按回车进行打包;  2.打包成功 , 生成了dist文件夹, 打包好的文件会默认存放在里面;   三. 用FinalShell连接服

    2024年02月16日
    浏览(37)
  • 手把手自己制作一个飞书机器人

    飞书机器人 如果你想添加新的对话逻辑,你只需要在 ChatApi.py 中添加新的if条件判断语句即可。如果你能开发出新功能,请在仓库中提出Pull requests合并请求,我将感激不尽! 2023年9月1日更新 更新了对话机器人返回帮助界面功能,用户发送“帮助”,返回机器人使用说明 20

    2024年02月03日
    浏览(84)
  • 手把手教你搭建一个Minecraft 服务器

    这次,我们教大家如何搭建一个我的世界服务器 首先,我们来到这个网站 MCVersions.net - Minecraft Versions Download List MCVersions.net offers an archive of Minecraft Client and Server jars to download, for both current and old releases! https://mcversions.net/   在这里,我们点击对应的版本,从左到右依次是稳定版

    2024年02月09日
    浏览(34)
  • 手把手教你用MindSpore训练一个AI模型!

    首先我们要先了解深度学习的概念和AI计算框架的角色( https://zhuanlan.zhihu.com/p/463019160 ),本篇文章将演示怎么利用MindSpore来训练一个AI模型。和上一章的场景一致,我们要训练的模型是用来对手写数字图片进行分类的LeNet5模型 请参考( http://yann.lecun.com/exdb/lenet/ )。 图1 M

    2024年02月04日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包