首先,我们先准备两个.py文件,还要图片文件         代码//是我自己手写的,copy时记得删掉,不然有可能错误,比如中英文啥的    当然 一些语法的无问题就百度,都能给你答案

第一个.py 代码

pyinstaller打包不打图片,但是.py文件肯定会打。那么把图片用.py文件保存就是解决问题的核心。也就是把图片用base64编码保存在文件里面。下面代码就是完成这个工作

  1. # -*- coding: utf-8 -*-
  2.  
  3. import base64
  4.  
  5. def pic2py(picture_name): #把图片用base64编码保存在文件里面。
  6. """
  7. 将图像文件转换为py文件
  8. :param picture_name:
  9. :return:
  10. """
  11. open_pic = open("%s" % picture_name, 'rb') #python 内置函数open() 用于打开一个文件
  12. #rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式
  13. b64str = base64.b64encode(open_pic.read())
  14. # 注意这边b64str一定要加上.decode()
  15. write_data = 'img = "%s"' % b64str.decode()
  16. f = open('%s.py' % picture_name.replace('.', '_'), 'w+') #打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
  17. f.write(write_data)
  18. f.close()
  19.  
  20. """
  21. 通俗的理解__name__ == '__main__':假如你叫小明.py,在朋友眼中,你是小明(__name__ == '小明');在你自己眼中,你是你自己(__name__ == '__main__')。
  22. if __name__ == '__main__'的意思是:当.py文件被直接运行时,if __name__ == '__main__'之下的代码块将被运行;当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。
  23. """
  24.  
  25. if __name__ == '__main__':
  26. pics = ["main_w.gif","sure.gif","not.gif"] //这个文件我们只需要改这里的这个list变量,它的元素就是我们要使用的图片的全名加后缀
  27. for i in pics:
  28. pic2py(i)
  29. print("ok")

然后这个,py文件创建好之后,我们到当前目录使用python xxx.py运行一遍。   当打印ok则运行正常。之后我们到当前目录就会看到多了例如这个文件:

到这里说明我们的图片已经编码完成并保存到该文件里了

第二个.py文件:主代码部分,加上将上面编码的图片数据在解码并生成图片到当前目录。执行完在删掉

这样做就是每次打开程序时都会解码到当前文件夹(因为图片数据已经编码并存储到.py文件,打包时也一同打包了,这样在别的电脑也就可以运行了)

  1. import tkinter as tk#这个语句导入tkinter模块,但为方便,为它定义了一个别名tk。
  2. import time#导入time模块后,我们就有了变量time指向该模块,利用time这个变量,就可以访问time模块的所有功能。
  3. import tkinter.messagebox #messagebox是普通windows编程中经常用到的,目的是显示个信息框
  4. import base64//要将编码之后的图片数据解码并保存为图片
  5. import os//我们删除图片,这个要添加进来
  6. from main_w_gif import img as socket_one //接下来就是在文件中导入你刚刚生成的xxx.py文件,因为每个图片文件里面都是img变量,所以导入的时候可以用别名,这是python的基本用法了,不再多说。
  7. from not_gif import img as socket_two
  8. from sure_gif import img as socket_three
  9.  
  10. tmp = open('socket_one.gif', 'wb') //这是解码。保存图片
  11. tmp.write(base64.b64decode(socket_one))
  12.  
  13. tmp = open('socket_two.gif', 'wb')
  14. tmp.write(base64.b64decode(socket_two))
  15.  
  16. tmp = open('socket_three.gif', 'wb')
  17. tmp.write(base64.b64decode(socket_three))
  18.  
  19. tmp.close()#现在就能用了,用完(加载到程序里之后)
  20.  
  21. """
    我们编写的Python代码会调用内置的Tkinter,Tkinter封装了访问Tk的接口;
  22.  
  23. Tk是一个图形库,支持多个操作系统,使用Tcl语言开发;
  24.  
  25. Tk会调用操作系统提供的本地GUI接口,完成最终的GUI。
  26.  
  27. 所以,我们的代码只需要调用Tkinter提供的接口就可以了
  28.  
  29. tkinter的两种写法,这两种写法是有区别的,
  30.  
  31. 第一种,使用就需要加类名,也就是需要加tkinter,  
    第二种,已经把tkinter完全导入了,你不用管调用的是哪个类,只管使用就可以了。所以不需要加类名。
  32.  
  33. #法1:
    import tkinter
    win=tkinter.Tk()
    win.mainloop()
    #法2:
    from tkinter import *
    win=Tk()
  34.  
  35. """
  36.  
  37. window = tk.Tk()
  38. # 设置主窗口大小
  39. window.geometry('450x400')
  40. # 设置主窗口标题
  41. window.title('你是不是比较蠢')
  42.  
  43. def closeWindow():
  44.  
  45. tkinter.messagebox.showerror(title='别嘛',message='还没回答呢!') #错误消息框
  46.  
  47. return
  48.  
  49. window.protocol('WM_DELETE_WINDOW', closeWindow)
  50.  
  51. # 设置文字
  52. lable1 = tk.Label(window, text="hey,xxx") #, font=("Arial", 14)
  53. lable2 = tk.Label(window, text="你是不是傻子?") #, font=("Arial", 34)
  54. # 设置图片
  55. photo = tk.PhotoImage(file='./socket_one.gif')
  56. imgLabel = tk.Label(window, imag=photo)
  57. # 调用tkinter的布局管理模块
  58. lable1.pack()
  59. lable2.pack()
  60. imgLabel.pack()
  61.  
  62. photo1 = tk.PhotoImage(file='./socket_two.gif')#不能放在love里面 由于垃圾回收机制造成的问题.当运行离开 create_new_demo() 作用域后,里面的 myimg 对象 被认为之后再也用不到.所以被垃圾回收机制给处理了.
  63. photo2 = tk.PhotoImage(file='./socket_three.gif')
  64.  
  65. # 点击喜欢的操作
  66. def Love():
  67. love = tk.Toplevel(window)
  68. love.geometry('400x220')
  69. love.title("好巧,我也这么认为")
  70. lable = tk.Label(love,text="好巧,我也这么认为") #, font=("Arial", 24)
  71.  
  72. imgLabel1 = tk.Label(love, imag=photo1)
  73. imgLabel1.pack()
  74.  
  75. btn = tk.Button(love, text="确定",width=30, height=2)
  76. btn.config(command=lambda :closelove(love))
  77. lable.pack()
  78. love.protocol('WM_DELETE_WINDOW', closeall)
  79. btn.pack()
  80.  
  81. # 点击不喜欢的操作
  82. def NoLove():
  83. no_love = tk.Toplevel(window)
  84. no_love.geometry('350x330')
  85. no_love.title("再考虑考虑呗")
  86. lable = tk.Label(no_love,text="再考虑考虑呗") #, font=("Arial", 24)
  87.  
  88. imgLabel2 = tk.Label(no_love, imag=photo2)
  89. imgLabel2.pack()
  90.  
  91. btn = tk.Button(no_love, text="确定",width=30, height=2)
  92. btn.config(command=lambda :closenolove(no_love))
  93. lable.pack()
  94. btn.pack()
  95. # 子窗口关闭操作
  96. def closeall():
  97. window.destroy()
  98.  
  99. def closelove(love):
  100. window.destroy()
  101.  
  102. def closenolove(no_love):
  103. no_love.destroy()
  104.  
  105. # 设置按钮
  106. btn1 = tk.Button(window, text=" 是 ",width=30, height=2)
  107. # 配置按钮
  108. btn1.config(command=Love)
  109. btn2 = tk.Button(window, text="不是",width=30, height=2)
  110. btn2.config(command=NoLove)
  111. # 调用tkinter的布局管理模块
  112. btn1.pack()
  113. btn2.pack()
  114.  
  115. window.mainloop()

  116. """
    window.mainloop就会让window不断的刷新,如果没有mainloop,就是一个静态的window,传入进去的值就不会有循环,mainloop就相当于一个很大的while循环,有个while,每点击一次就会更新一次,所以我们必须要有循环
      所以的窗口文件都必须有类似的mainloop
      mainloop是窗口文件的关键的关键的关键。
  117.  
  118. """
  119. os.remove('socket_one.gif')//删除图片
  120. os.remove('socket_two.gif')
  121. os.remove('socket_three.gif')

之后按照我前面说的打包教程打包第二个.py文件,就ok了

关不掉的小姐姐程序python tkinter实现 学习---打包教程的更多相关文章

  1. 画一个心送给心爱的小姐姐,Python绘图库Turtle

    Python绘图库Turtle Turtle介绍 Turtle是Python内嵌的绘制线.圆以及其他形状(包括文本)的图形模块. 一个Turtle实际上是一个对象,在导入Turtle模块时,就创建了对 ...

  2. Python Tkinter的学习

    Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macinto ...

  3. python tkinter组件学习

    http://blog.csdn.net/pfm685757/article/details/50162567

  4. Python 抖音机器人,论如何在抖音上找到漂亮小姐姐?

    只有想不到,没有做不到,最近抖音风靡好友圈,马上就有技术宅本着“代码改变世界”的理念开始了搞事之路. 需要注意的事,漂亮不漂亮没有明确的界限,每个人都有每个人的审美,只有外表而没有心灵的美也是空洞的. ...

  5. 还在担心网聊相亲的小姐姐,美女变恐龙!Python帮你"潜伏"侦查

    ​ 最近,小编的一个朋友很是苦恼,他在Python交流的群里,认识了一个妹子,看头像感觉挺不错的,大家都喜欢摄影,蛮谈得来的!但是想要约见面却不敢,因为他看过<头号玩家>,深知躲在电脑背后 ...

  6. 刷抖音太累,教你用Python把高颜值的小姐姐都爬下来慢慢看

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 星安果.AirPython 目 标 场 景 相信大家平时刷抖音短视频 ...

  7. 用python实现在手机查看小姐姐的电脑在作什么!

    看上心意的小姐姐,想看她平时都浏览什么网页,如何才能看她的桌面呢,都说Python很厉害,这次我们做一个利用移动端访问电脑来查看电脑的界面的神器!不知道大家以前有没有做过这方面的东西呢?也许大家听起来 ...

  8. 用Python做个海量小姐姐素描图

    素描作为一种近乎完美的表现手法有其独特的魅力,随着数字技术的发展,素描早已不再是专业绘画师的专利,今天这篇文章就来讲一讲如何使用python批量获取小姐姐素描画像.文章共分两部分: 第一部分介绍两种使 ...

  9. 小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码)

    小姐姐带你一起学:如何用Python实现7种机器学习算法(附代码) Python 被称为是最接近 AI 的语言.最近一位名叫Anna-Lena Popkes的小姐姐在GitHub上分享了自己如何使用P ...

随机推荐

  1. Spring AOP初级——入门及简单应用

      在上一篇<关于日志打印的几点建议以及非最佳实践>的末尾提到了日志打印更为高级的一种方式——利用Spring AOP.在打印日志时,通常都会在业务逻辑代码中插入日志打印的语句,这实际上是 ...

  2. 今天看了几个小时的微信小程序说说心得体会

    今天看了几个小时的微信小程序说说心得体会 小程序是个前端框架 根据微信相关提供了很多接口 1 先说说各种后缀的文件 .json 后缀的 JSON 配置文件.wxml 后缀的 WXML 模板文件.wxs ...

  3. git 第一次提交代码

    git init git add README.md git commit -m "first commit" git remote add origin https://git. ...

  4. kettle数据库连接使用变量

    新增db连接(密码也可以设置参数) 转换中,右键空白处,选择转换设置

  5. 03 字符串常用操作方法及For 循环

    字符串常用操作 s = 'alexWUsir' s1 = s.capitalize() #首字母大写 print(s1) #Alexwusir s2 = s.upper() #全部大写 print(s ...

  6. <记录> axios 模拟表单提交数据

    ajax 可以通过 FormData 对象模拟表单提交数据 第一种方式:自定义FormData信息 //创建formData对象 var formData = new FormData(); //添加 ...

  7. Eclipse 安装中文简体语言包

    Installing the language packs Open the install wizard with 'Help' > 'Install new software...' Add ...

  8. ---command line edit and histroy of perl cpan shell

    https://www.redhat.com/archives/psyche-list/2003-February/msg00494.html perl -MCPAN -e shell > in ...

  9. 剑指offer例题——反转链表

    题目描述 输入一个链表,反转链表,输出新链表的表头 程序编写 将链表反转 public class Solution { public ListNode ReverseList(ListNode he ...

  10. week06 12 后端utils cloudAMQP_client.py 安装pika

    我们回到后端 pika是专门处理RabitAMQP的包 或者你可以直接一步到位 我们不能一直让我们的网络爬虫一直爬信息 一是网络消耗很大(cpu) 二是容易被网站发现被禁ip self.connect ...