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

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

一,打包介绍:

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

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

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

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

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

打包实例

二, 打包演示:

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

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

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

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

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

提示成功打包,

多了这些文件,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的软件

三,填充文字实例:

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

这样就好看一些(如下)

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

可以先写在名字截图,在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中,字符串可以相加,可以和数字相乘来重复

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

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

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

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

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

三.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.sizeimg = 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_strlist1 = 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+1ct += 1else:final_str += "{}*'{}'+".format(ct, s0)       # 否则整体加上已经重复的次数*字符,并且计数清零,字符更改s0 = sct = 1final_str += "'\\n'+"final_str = final_str[0:-1]                             # 最后一个是加号return final_strdef fun1():tag1.config(bg="white")tag2.config(bg="white")tag3.config(bg="white")global goal_strs, word_size, fill_itemcount = 1if len(ent1.get()) > 0:goal_strs = ent1.get()count += 1else:tag1.config(bg="red")try:word_size = int(ent2.get())count += 1except:tag2.config(bg="red")if len(ent3.get()) == 1:fill_item = ent3.get()count += 1else: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_itemcount = 1if len(ent1.get()) > 0:goal_strs = ent1.get()count += 1else:tag1.config(bg="red")try:word_size = int(ent2.get())count += 1except:tag2.config(bg="red")if len(ent3.get()) == 1:fill_item = ent3.get()count += 1else: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.sizeimg = 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初学者。编程初学者作业:用*填充出自己的名字相关推荐

  1. 基于Vue实现一个简易的小程序框架,浅谈kafka | 每日掘金第 194 期

    Hello,又到了每天一次的下午茶时间.酱酱们的下午茶新增优质作者介绍和码上掘金板块,专注于发掘站内优质创作者和优质内容,欢迎大家多提宝贵意见! 酱酱们的下午茶全新改版,欢迎大家多提宝贵意见! 本文字 ...

  2. 如何用excel制作xy曲线图_用Excel制作一个简易抽奖小程序,可一次抽取多人

    抽奖程序在很多场合都能派上用场,比如商场开业促销.课堂点名.抽取幸运观众等.我们今天就用Excel来制作一个简单的抽奖小程序,仅做参考. 抽奖小程序是下图这个样子的.我们按一下键盘上的F9键,即可完成 ...

  3. 从0到1搭建一个简易微信小程序

    1.安装微信开发者工具(过程略) 2.创建第一个微信小程序 输入已申请好的微信小程序的AppID 3.工程界面目录结构简介: 4. app.js  页面数据交互 App() 为程序方法入口: onLa ...

  4. 如何制作一个简易的小程序

    对于一个不会编代码,也不怎么会设计的人,可以做一个属于自己的小程序吗? 答案是可以的,到百度建站这个平台上就能实现. 为什么这么说呢,我们来看,百度建站里,有许多种行业的小程序模板. 即使对小程序的搭 ...

  5. 手把手教你用Java实现一个简易联网坦克对战小游戏

    作者:炭烧生蚝 cnblogs.com/tanshaoshenghao/p/10708586.html 介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本 ...

  6. java怎么实现网络对战平台_手把手教你用Java实现一个简易联网坦克对战小游戏...

    介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...

  7. 如何用java让坦克发射子弹_手把手教你用Java实现一个简易联网坦克对战小游戏 !...

    介绍 通过本项目能够更直观地理解应用层和运输层网络协议, 以及继承封装多态的运用. 网络部分是本文叙述的重点, 你将看到如何使用Java建立TCP和UDP连接并交换报文, 你还将看到如何自己定义一个简 ...

  8. python鼠标绘图_python 基于opencv 实现一个鼠标绘图小程序

    需求 在画布上用鼠标画图,可以画圆或矩形,按m键在两种模式下切换.左键按下时开始画图,移动到哪儿画到哪儿,左键释放时结束画图. 实现思想 用鼠标画图:需要定义鼠标的回调函数mouse_event 画圆 ...

  9. 如何将一个python文件打包成一个可执行的小程序

    如何将一个Python文件打包成一个可执行的小程序 一.安装pyinstaller pyinstaller: 一个用来打包python的py文件的库,通过他可以将.py文件打包成可执行的.exe文件 ...

最新文章

  1. First non repeating word in a file? File size can be 100GB.
  2. php调用搜狗ocr接口,搜狗ocr识别接口
  3. ubuntu下docker使用GPU
  4. hust1344(阶层问题+暴力)
  5. 程序员平均月薪过万,想当程序员的话,大学学那些专业会更好呢?
  6. JEESITE快速开发平台(二)环境搭建
  7. Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货
  8. PLSQL 14.0.6 安装使用教程
  9. cad卸载工具_使用感极好的5款软件分享,款款高逼格,下载之后就没舍得卸载...
  10. java 文件删除不了_java的File类的 delete方法删不掉文件的原因分析
  11. C/C++ 【华为机试】输入一个真分数,将该分数分解为埃及分数。
  12. HTTP POST 参数格式
  13. 第四章第二节数据资产盘点-数据资产盘点方法伦
  14. 模块学习4:(1)通过MQTT协议和电信云平台的通信(内附MQTT协议V3.1.1的原版和中文参考资料)
  15. 15个SEO学习的国外SEO博客
  16. 【深入kotlin】 - 初识 Flow
  17. 使用PyPI来发布FPGA Overlays
  18. opencv读取图像始终显示NoneType
  19. 国内外高质量的电机控制类期刊
  20. npm、pnpm和yarn使用(官网、安装、命令行、上传自己的包、包版本号详解、更新卸载包、查看所有版本、同等依赖peer、可选依赖optional)

热门文章

  1. 东莞塘厦适合团建的农家乐|团建出游好去处|休闲游玩好地方
  2. HDU 1290 献给杭电五十周年校庆的礼物(空间分割)
  3. 微软自动化神器playwright
  4. 微信小程序和微信公众号关联
  5. MySQL-01.深入理解MySQL底层数据结构
  6. 微信公众号开发【一】 菜单获取与设置
  7. Uni-app API
  8. sqlserver无法连接的localhost解决方案
  9. 移动开发大作业————随手记(主界面和编辑界面)
  10. android动态壁纸2.2.1,动态壁纸选择器