Python tkinter多进程多线程前邮箱,再用pyinstaller编译成exe

2023-05-16

写博客记录一下Python 用tkinter 多进程线程写成的邮箱应用,只是一个简单的应用,尝试进程调度,并用pyinstaller打包成exe

注意:

1、平台环境win7  、Python3.6 、 pyinstaller3.3(安装方法,百度有,这里不加说明,Windows下Python3的pyinstaller会出错,解决办法,百度)

2、Windows下多进程,在if __name__=='__main__':里面去启动才不会出错

3、tkinter调用mainloop() 函数 应在 主线程的最后一行,因为mainloop会进入屏幕显示循环,mainloop()之后的代码会在UI界面退出之后再执行(已经没意义了),

所以重点 :后台进程,后台线程,要在mainloop之前去启动

4、pyinstaller打包Python多进程 请加以下这行

        multiprocessing.freeze_support()

5、以上注意在代码注释有



从上之下依次是label:作用是显示,发送成功,失败,以及找不到附件等信息

第一个Entry 是输入主题

第二个Entry是输入正文(这里随便用了entry,用Text更合适)

第三个Entry输入附件的文件位置

Button 就是发送



tkinter 进程代码(继承了threading.Thread)

from tkinter import *
import multiprocessing 
from send_mail import send_my_mail#引入发送邮件
import threading
class My_Gui(threading.Thread):
 	"""docstring for My_Gui"""
 	def __init__(self,queue_1,queue_2,event_1):
 		super(My_Gui,self).__init__()
 		self.queue_1=queue_1
 		self.queue_2=queue_2
 		self.root=Tk()
 		self.root.title="EMAIL"
 		self.label_1=Label(self.root,text='info')
 		self.entry_1=Entry(self.root,)
 		self.entry_2=Entry(self.root,)
 		self.entry_3=Entry(self.root,)
 		#button的command调用函数需要参数时 用lambda
 		self.button_1=Button(self.root,text='SEND',command=lambda:self.button_click(queue_1,event_1))
 		self.label_1.pack()
 		self.entry_1.pack()
 		self.entry_2.pack()
 		self.entry_3.pack()
 		self.button_1.pack()
 		# self.root.mainloop()
 		
 		
 	def button_click(self,queue,event_1):
 		if not self.entry_1.get()=='':
 			queue.put(self.entry_1.get())#获取三个输入框内容依次进入队列发送给后台进程
 			queue.put(self.entry_2.get())
 			queue.put(self.entry_3.get())
 			event_1.set()
 			self.label_1['text']='sending email'
 	#多线程等待后台进程返回消息,防止UI卡顿
 	def run(self):
 		self.button_1['text']='Send'
 		while True:
 			if not self.queue_2.empty():
 				info=self.queue_2.get()
 				if info=='succeed':
 					self.label_1['text']='succeed'
 				elif info=='failure':
 					self.label_1['text']='failure'
 				else:
 					self.label_1['text']='file not found'

def back_process(queue_1,queue_2,event_1):
	while True:
		event_1.wait()
		subject=queue_1.get()#后台进程获取UI进程“主题”输入框内容
		body=queue_1.get()#后台进程获取UI进程“正文”输入框内容
		img=queue_1.get()#附件	
		flage_1=send_my_mail(subject,body,img)#调用发送邮件函数
		queue_2.put(flage_1)#将发送邮件函数的返回 发送给UI进程
		event_1.clear()

if __name__=='__main__':
	#多线程多进程都必须在mainloop之前去执行
	multiprocessing.freeze_support() #在Windows下编译需要加这行
	queue_1=multiprocessing.Queue()#用来UI进程向后台发送邮件进程发送消息
	queue_2=multiprocessing.Queue()#用来后台进程向UI进程发送消息
	event_1=multiprocessing.Event()#控制后台进程是否阻塞
	t=multiprocessing.Process(target=back_process,args=(queue_1,queue_2,event_1))
	t.daemon=True
	t.start()#要先于mainloop调用start 不然 进程不会启动
	my_Gui=My_Gui(queue_1,queue_2,event_1)#GUI之后的代码不执行
	my_Gui.daemon=True
	my_Gui.start()#要先于mainloop调用start 不然 线程不会启动
	my_Gui.root.mainloop()#mainloop必须要在最后去执行,相当于while阻塞


发送邮件的Python文件


import smtplib,sys
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.header import Header

def send_my_mail(subject,body,img):
	form_addr="你的邮箱@163.com"
	my_fassword='你的邮箱密码'

	to_addr=["你要发送的邮箱@qq.com"]

	msg=MIMEMultipart()
	msg['From']=Header(form_addr)
	msg['To']=Header("你要发送的邮箱@qq.com")
	msg['Subject']=Header(subject,"utf-8")
	body=MIMEText(body,'plain','utf-8')
	msg.attach(body)
	try:
		att1=MIMEText(open(img,'rb').read(),'base64','utf-8')
	except Exception as e:
		return 'file not found'	
	
	att1['Content-Type']='application/octet-stream'
	att1['Content-Disposition']='attachment;filename=%s'%img
	msg.attach(att1)

	try:
		smtpobj=smtplib.SMTP()
		smtpobj.connect('smtp.163.com')
		smtpobj.login(form_addr,my_fassword)
		smtpobj.sendmail(form_addr,to_addr,msg.as_string())
		# print('succeed')
		return 'succeed'
	except Exception as e:
		print(str(e))
		return 'failure'






本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python tkinter多进程多线程前邮箱,再用pyinstaller编译成exe 的相关文章

  • 关于Goland调试不可以使用

    今天在使用Goland时发现Goland断点调试无法使用 如下图所示 在找了半天之后在某论坛找到了原因 结果是360把Go的程序截拦导致无法断点调试 关闭360 重新打开文件即可使用
  • MySQL导入含有触发器的sql脚本报错解决方案

    报错码 ERROR 1419 HY000 You do not have the SUPER Privilege and Binary Logging is Enabled 解决方案 1 Linux下执行sql脚本 我们一般在linux服务
  • maven 本地仓库的配置以及如何修改默认.m2仓库位置

    本人转载于http blog csdn net qq 27093465 article details 52957253 以下为转载内容 xff1a 本地仓库是远程仓库的一个缓冲和子集 xff0c 当你构建Maven项目的时候 xff0c
  • onNewIntent 作用

    当Activity启动模式为singleTask时 如果在栈中已经有该Activity的实例 xff0c 就重用该实例 会调用实例的onNewIntent 不会调用onCreate方法 重用时 xff0c 会让该实例回到栈顶 xff0c 因
  • xml与txt文件格式互换

    当前遇到一个问题 xff0c 需要将txt格式的文件转换为xml格式的文件 xff0c 网上找了挺多的方法 xff0c 也成功了 但用时比较麻烦 xff0c 考虑到后期程序的需要 xff0c 决定开发一个小程序 耗时两个半天 xff0c 终
  • Spring中自定义注解的解析过程-学习

    Spring中自定义注解的解析过程 学习 在学习spring源码的过程中 xff0c 最好奇的一件事就是Sprint的注解是怎么被读取到的 xff0c 又是怎么进行解析的 然后又是怎么将注解的内容注入到spring容器中的 带着这个好奇心
  • [RK3399][Android7.1] 调试笔记 --- 移除/删除Settings的Preference的三种方法小结

    Platform RK3399 MID OS Android 7 1 2 Kernel v4 4 83 需求 xff1a 整理一下移除 删除Settings的Preference三种方法 xff1b 方法一 xff1a 对于 Prefere
  • windows server 2008 R2服务器系统密码破密

    问题 xff1a 管理员administrator密码忘记 前提 xff1a 服务器型号Dell S130 2 系统2008R2 3 系统带有阵列驱动 准备工具 xff1a 1 2008R2系统光盘 xff0c 2016 R2系统光盘 2
  • Java 经典例题:生产者/消费者问题

    Java 经典例题 xff1a 生产者 消费者问题 1 问题2 分析3 demo 1 问题 生产者 Productor 将产品交给店员 Clerk xff0c 而消费者 Customer 从店员处取走产品 xff0c 店员一次只能持有固定数
  • angular2如何识别字符串中的html标签,并按照html来显示视图

    这个源于一个需求 xff1a 从后台拿到用户评论的内容 xff0c 该内容是字符串的 xff0c 但是里面包含了html代码 要求显示的时候按照html来显示 xff0c 不是按照字符串来显示 并且要求任意的段文字添加样式 xff1b 思路
  • 使用虚拟机安装kali Linux遇到的运行问题

    最近在虚拟机上安装Linux xff0c 谁知道在运行安装的时候 xff0c 竟然报这个错误 xff0c 唯恐以后学习中再次遇到同样的问题 xff0c 以至于手忙脚乱 xff0c 所以在此做下收录 出现此类问题是因为360安全防护中心的In
  • 安装kali2.0之后,如何从Windows中通过SecureCRT工具远程到kali中呢?

    xfeff xfeff 1 在kali的终端输入 etc init d ssh status 回车 xff0c 用来查看kali中SSH服务状态 xff1b 由上图可知 xff0c kali Linux 默认情况下SSH服务是inactiv
  • 虚拟机权限不足,无法访问文件

    今天在使用虚拟机的时候 xff0c 出现了一个报错 xff0c 一下子懵逼了 xff0c 找度娘百度了一下 xff0c 各种答案五花八门 xff0c 但是根本木有卵用 xff0c 问题如下图 xff1a 解决方案是 xff1a 现在关掉虚拟
  • 如何使用英文界面的JMETER

    如何使用英文界面的JMETER JMETER启动时会自动判断操作系统的 locale 并选择合适的语言启动 xff0c 所以 xff0c 我们启动JMETER 后 xff0c 会出现一个倍感亲切的中文界面 但由于JMETER 本身的汉化工作
  • 在CMD命令行模式下运行.py文件,提示:无法初始化设备PRN

    在CMD命令行模式下运行 py文件 xff0c 提示 xff1a 无法初始化设备PRN 问题的重现步骤 xff1a 首次学习python xff0c 不知道 py文件是如何创建的 xff0c 故新建了一个txt文件 xff0c 添加完内容之
  • office 2010 Word,Excel的功能区突然消失了

    office 2010 Word Excel的功能区突然消失了 xff0c 点击展开功能区无效 在网上搜了很久没有找到解决办法 Office都卸载重装过还是无法解决 在网上找到一个方法 xff1a 将com加载项的ntkofficecont
  • IndentationError:expected an indented block

    xfeff xfeff 在用python写判断语句时 xff0c 报错 错误语句写法如下 xff1a 报错信息如下 xff1a 解决方案如下 xff1a 在print前面加上Tab 问题迎刃而解
  • kindeditor使用可能遇到的问题

    1 音视频上传不能播放问题 xff08 使用自定义video标签 xff09 更改kindeditor all min js中的 mediaImg方法 function mediaImg blankPath attrs if attrs s
  • manjaro21折腾笔记

    1 换源以及更新 1 1 配置镜像源 span class token function sudo span pacman mirrors i c China m rank 输入后会出现源列表选项 xff0c 全选即可 1 2 设置源 打开
  • 最简nvim配置

    1 安装nvim span class token function sudo span span class token function apt get span span class token function install sp

随机推荐

  • 竟然可以在Windows下用Nvim写代码?2.nvim基础插件配置

    在windows下用nvim写代码 使用wsl和terminal简直不要太方便 保姆级教学 一篇就够了 一 下载plug 可以用指令安装 curl fLo config nvim autoload plug vim create dirs
  • vscode国内源下载

    https az764295 vo msecnd net stable ea3859d4ba2f3e577a159bc91e3074c5d85c0523 VSCodeUserSetup x64 1 52 1 exe 将官方下载地址的域名更换
  • linux下搜狗拼音隐藏悬浮状态栏

    打开配置文件 vim config sogoupinyin conf env ini 找到以下内容 并修改为0 StatusAppearance 61 0 重启fcitx状态栏就消失了 killall fcitx fcitx
  • JavaScript笔记(2)

    7 对象 xff1a 对象的三种声明与调用方法 span class token comment 第一种声明方法 span span class token keyword let span ObjectName span class to
  • C++类与对象笔记

    C 43 43 类与对象笔记 本章主要讲了面向对象三大特性 xff1a 封装 xff0c 继承 xff0c 多态 C 43 43 认为万事万物都皆为对象 xff0c 对象上有其属性和行为 例如 xff1a 人可以作为对象 xff0c 属性有
  • C++基础笔记

    C 43 43 基础笔记 本章主要讲了在c的基础上 xff0c c 43 43 的拓扑基础的部分 xff0c 还有内存的分配 1 内存分区模型 C 43 43 程序在执行时 xff0c 将内存大方向划分为4个区域 1 代码区 xff1a 存
  • linux文件名匹配(通配符使用)

    当在使用命令行时 xff0c 有很多时间都用来查找你所需要的文件 xff0c 如ls find等 S h e l l提供了一套完整的字符串模式匹配规则 xff0c 或者称之为元字符 xff0c 当s h e l l遇到上述字符时 xff0c
  • Android指纹识别,兼容Android 6.0 - Android 11

    目录 前言 概览 1 类 2 权限 详细介绍 1 BiometricManager 属性和方法 是否可用的状态码 方法 2 BiometricPrompt 属性和方法 验证的结果常用错误码 不全 方法 实战 第一步 引入支持库 第二步 检查
  • Lottie-Android详解

    Lottie是什么 Lottie是Airbnb开源的一套跨平台的 完整的动画效果解决方案 xff0c 适用于 Android iOS Web 和 Windows 平台 xff0c 它解析使用 Bodymovin 导出为 json 的 Ado
  • 组合问题,n个元素分成k组-5

    题目要求 P n k 代表将n个元素分成k个非空分组集合的总集 例如 xff0c 当L 61 1 2 3 P xff08 3 xff0c 2 xff09 61 12 3 13 2 1 23 我们就假设此n个元素是从1到n P 4 3 61
  • FTPClient踩过的坑

    一 ftpClient enterLocalPassiveMode public static final int PASSIVE LOCAL DATA CONNECTION MODE 61 2 官网关于该常量的说明 xff1a A con
  • Camera基本属性了解及设置

    将camera肯定是要有预览界面来配合着才有激情 xff0c 不然无图无真相 那就讲的没有太大的激情 我们对camera的使用一般是在app里面有用到设置获取图片的时候提供一个拍照功能 xff0c 一般是跳转到系统的拍照界面使用camera
  • 验证码不显示的解决方法

    方法一 xff1a 出现上面的情况 xff0c 最基本的一个错误就是你很可能在php里面忘记安装gd模块了 window环境下面只需要在php ini文件里面找到 把前面的分号去掉就可以了 xff0c 重启apache后 xff0c 你就可
  • 纯NumPy代码从头实现简单的卷积神经网络

    在某些情况下 xff0c 使用 ML DL 库中已经存在的模型可能会很便捷 但为了更好地控制和理解模型 xff0c 你应该自己去实现它们 本文展示了如何仅使用 NumPy 库来实现 CNN 卷积神经网络 xff08 CNN xff09 是分
  • 一文搞懂结构体变量占用多大内存空间(详细)

    一 首先做一道例题感受一下 请问下面定义的结构体变量aa在计算机内存中占用多少字节 xff1f span class token macro property span class token directive hash span spa
  • harbor+trivy的安装使用——筑梦之路

    环境依赖 xff1a docker ce docker compose 这些部分的安装这里就不再赘述 创建证书和私钥 mkdir opt harbor ssl p 生成CA证书私钥 ca key openssl genrsa out ca
  • Thinkphp 6.0响应输出和重定向

    本节课我们来学习一下响应操作 xff0c 响应输出和重定向 一 xff0e 响应操作 1 响应输出 xff0c 有好几种 xff1a 包括 return json 和 view 等等 xff1b 2 默认输出方式是以 html 格式输出 x
  • log4net配置经验教训

    第一点 xff1a 权限问题 xff0c 一定要给要写入日志文件的目录宽松的权限 本人就是因为权限问题浪费了很多时间 xff08 因为iis user 的权限是相对低的 xff0c log4net又需要创建文件 xff0c 所以权限一定要给
  • Linux的目录结构

    目录说明bin存放二进制可执行文件 ls cat mkdir等 boot存放用于系统引导时使用的各种文件dev用于存放设备文件etc存放系统配置文件home存放所有用户文件的根目录lib存放跟文件系统中的程序运行所需要的共享库及内核模块mn
  • Python tkinter多进程多线程前邮箱,再用pyinstaller编译成exe

    写博客记录一下Python 用tkinter 多进程线程写成的邮箱应用 xff0c 只是一个简单的应用 xff0c 尝试进程调度 xff0c 并用pyinstaller打包成exe 注意 xff1a 1 平台环境win7 Python3 6