使用 pyinstaller 打包工具常用参数指南


pyinstaller -F demo.py
参数 含义
-F 指定打包后只生成一个exe格式的文件
-D –onedir 创建一个目录,包含exe文件,但会依赖很多文件(默认选项)
-c –console, –nowindowed 使用控制台,无界面(默认选项)
-w –windowed, –noconsole 使用窗口,无控制台
-p 添加搜索路径,让其找到对应的库。
-i 改变生成程序的icon图标
pyinstaller -F -w -noconsole Annual_awards_main.py --distpath=C:\Users\FrankLi\xxxx\dist --icon="./start.ico"

在线 图标转换

资源文件目录:

uploading-image-149426.png

完整 代码 第一版

# -*- coding: utf-8 -*-
__author__ = 'Frank Li'
__version__ = 1.0
import pygame
from pygame.locals import *
from sys import exit
import xlrd
import random FULLSCREEN = False
MUSIC_FILE = './music/月之门 - 白龙口.mp3'
DRUM_STICK = './frontimgs/gc_cz.png'
font_file = './fonts/simhei.ttf'
excel_file = './employee/name_file.xlsx'
clock = pygame.time.Clock()
mode = 1 if FULLSCREEN else 0 # default 0 <--> Full Screen mouse_range = dict(top=460,bottom=560,left=970,right=1030) def get_name_list_from_excel(file_name):
'''"解析 人员.xlsx 文件,得到人员名单列表"'''
name_list = []
excelFile = xlrd.open_workbook(file_name)
sheet = excelFile.sheet_by_name('employee')
#print sheet.name, sheet.nrows, sheet.ncols
job_num = sheet.cell(0, 0).value
job_name = sheet.cell(0, 1).value
for row in range(1, sheet.nrows):
job_num = sheet.cell(row, 0).value
job_name = sheet.cell(row, 1).value
name_list.append((job_num, job_name))
return job_num, job_name, name_list def handle_mouse_event(index,drum_stick_obj,pause_flag):
if pygame.mouse.get_pressed()[0]:
x, y = pygame.mouse.get_pos()
x -= drum_stick_obj.get_width() / 2
y -= drum_stick_obj.get_height() / 2
if all((mouse_range.get('top')-50 < y < mouse_range.get('bottom'),mouse_range.get('left')-50 < x < mouse_range.get('right'))):
print('coming ...')
pause_flag = not pause_flag if pause_flag:
pygame.mixer.music.stop()
print('暂停') if pause_flag else print('播放')
else:
pygame.mixer.music.play()
print('暂停') if pause_flag else print('播放')
if name_list:
del name_list[index] return index,pause_flag if __name__ == '__main__':
job_num, job_name, name_list = get_name_list_from_excel(file_name=excel_file)
pygame.init()
if not FULLSCREEN:
screen = pygame.display.set_mode((1200,673),0,32)
bgImage = './bgimgs/bg_1366x768.png'
else:
screen = pygame.display.set_mode((1200, 673), 0, 32)
bgImage = './bgimgs/bg_1366x768.png' # 这里替换一下 bgImageObj = pygame.image.load(bgImage).convert()
screen.blit(bgImageObj, (0, 0))
drum_stick_obj = pygame.image.load(DRUM_STICK).convert_alpha() pygame.display.set_caption("年会抽奖小程序") pygame.mixer.init()
pygame.mixer.music.load(MUSIC_FILE)
pygame.time.delay(1000) # 等待 1 s 钟
pygame.mixer.music.set_volume(0.5) # 设置播放音量
pygame.mixer.music.play(-1) # 循环播放
pause_flag = False if len(name_list):
index = random.randint(0,len(name_list)-1)
else:
prompt = '请检查员工信息表是否为空!' while True:
clock.tick(60)
for event in pygame.event.get():
if event.type == pygame.QUIT or event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE:
pygame.quit()
exit()
if event.type == pygame.MOUSEBUTTONDOWN:
x,y = pygame.mouse.get_pos()
print(x,',',y)
index,pause_flag = handle_mouse_event(index,drum_stick_obj,pause_flag) # 暂停完成其实是将index再次返回重绘时候又用一样的 if not pause_flag:
# 若没有按下暂停键,那么每次循环都随机
if len(name_list):
index = random.randint(0, len(name_list)-1)
# 写字
pno = name_list[index][0]
pname = name_list[index][1]
text_context = '恭喜工号 {} 姓名{} 喜提特等奖!'.format(pno, pname)
else:
text_context = ' 年会抽奖完满结束,祝大家新年万事如意,阖家欢乐!'
# if not pygame.mixer.music.get_busy():
# pygame.mixer.music.play() # 重新刷新背景图片 防止重影
screen.blit(bgImageObj, (0, 0)) # 获取鼠标位置,使用 图片替代
x, y = pygame.mouse.get_pos()
x -= drum_stick_obj.get_width() / 2
y -= drum_stick_obj.get_height() / 2
pygame.mouse.set_visible(False)
screen.blit(drum_stick_obj,(x,y)) # 抽奖结果展示
font = pygame.font.Font(font_file, 40)
text_obj = font.render(text_context, True, (255, 255, 255), (0, 0, 0))
text_pos = text_obj.get_rect()
text_pos.center = (500, 50)
screen.blit(text_obj, text_pos) # 作者以及版本信息
font2 = pygame.font.Font(font_file, 10)
text_obj = font2.render('软件作者 {} , 版本号: {}'.format(__author__,__version__), True, (255, 255, 255), (255, 0, 0))
text_pos = text_obj.get_rect()
text_pos.center = (1000, 650)
screen.blit(text_obj, text_pos) pygame.display.update()
# 使用 pyinstaller 打包

pyinstaller -F -w -noconsole AnnualGame.py --distpath=C:\Users\FrankLi\PycharmProjects\jdquickbuy.py\game\dist --icon="./favicon.ico"

python 主流 GUI 库

Python下各种GUI简介、使用优缺点对比
GUI编程对比 简介特点 优缺点 PyQt  Python 对跨平台的 GUI 工具集 Qt 的包装实现了 440 个类以及 6000 个函数或者方法 ,PyQt 是作为 Python 的插件实现的。   比较流行的一个 Tkinter 的替代品,功能 非常强大,可以用Qt开发多美漂亮的界面,也就可以用PyQt开发多么漂亮的界面。 跨平台的支持很好,不过在商业授权上似乎存在一些问题。 Tkinter 绑定了 Python 的 Tk GUI 工具集 ,就是Python 包装的Tcl代码,通过内嵌在 Python 解释器内部的 Tcl 解释器实现, Tkinter的调用转换成 Tcl 命令,然后交给 Tcl 解释器进行解释,实现 Python 的 GUI 界面。 对比Tk和其它语言的绑定,比如 PerlTk ,是直接由 Tk 中的 C 库实现的。 历史最悠久, Python 事实上的标准 GUI , Python 中使用 Tk GUI 工具集的标准接口,已经包括在标准的 Python Windows 安 装中,著名的 IDLE 就是使用 Tkinter 实现 GUI 的创建的 GUI 简单,学起来和用起来也简单。 wxPython Python 对跨平台的 GUI 工具集 wxWidgets ( C++ 编写)的包装,作为 Python 的一个 扩展模块实现。 比较流行的一个 Tkinter 的替代品,在 各种平台下都表现挺好。 PyGTK 一系列的 Python 对 GTK+ GUI 库的包装。 比较流行的一个 Tkinter 的替代品,许多 Gnome 下的著名应用程序的 GUI 都是使用 PyGTK 实现的,比如 BitTorrent , GIMP和 Gedit 都有可选的实现,在 Windows 平台 似乎表现不太好,这点也无可厚非,毕竟使用的是GTK 的 GUI 库。 PySide 另一个 Python 对跨平台的 GUI 工具集 Qt 的包装,捆绑在 Python 当中,最初由 BoostC++ 库实现,后来迁移到 Shiboken。 比较流行的一个 Tkinter 的替代品,和上 面类似,至于两者的区别,这里 有一个介绍。   PyQt 的介绍 : http://en.wikipedia.org/wiki/PyQt Tkinter 的介绍 : http://en.wikipedia.org/wiki/Tkinter wxPython 的介绍 : http://en.wikipedia.org/wiki/WxPython PyGTK 的介绍 : http://en.wikipedia.org/wiki/PyGTK PySide 的介绍 : http://en.wikipedia.org/wiki/PySide

主流GUI

用 python 写一个年会抽奖小程序的更多相关文章

  1. Python写一个自动点餐程序

    Python写一个自动点餐程序 为什么要写这个 公司现在用meican作为点餐渠道,每天规定的时间是早7:00-9:40点餐,有时候我经常容易忘记,或者是在地铁/公交上没办法点餐,所以总是没饭吃,只有 ...

  2. 利用 Python 写一个颜值测试小工具

    我们知道现在有一些利用照片来测试颜值的网站或软件,其实使用 Python 就可以实现这一功能,本文我们使用 Python 来写一个颜值测试小工具. 很多人学习python,不知道从何学起.很多人学习p ...

  3. python——公司年会抽奖小程序

    张三科技有限公司有300名员工,开年会抽奖,奖项如下一等奖3名 : 泰国五日游二等奖6名 :iphone手机三等奖30名 :避孕套一盒规则:1.一共抽3次,第一次抽3等奖,第二次抽2等奖,第三次压轴抽 ...

  4. Python3的tkinter写一个简单的小程序

    一.这个学期开始学习python,但是看了python2和python3,最后还是选择了python3 本着熟悉python的原因,并且也想做一些小程序来增加自己对python的熟练度.所以写了一个简 ...

  5. 用python写个简单的小程序,编译成exe跑在win10上

    每天的工作其实很无聊,早知道应该去IT公司闯荡的.最近的工作内容是每逢一个整点,从早7点到晚11点,去查一次客流数据,整理到表格中,上交给素未蒙面的上线,由他呈交领导查阅. 人的精力毕竟是有限的,所以 ...

  6. C++写一个排列组合小程序

    今天突然想到一个问题,有时候,针对同一个事件有多种反映,特别是游戏AI当中,这种情况下需要采取最适合的方案,哪种方案最适合,可以将每种方案的结果或影响都计算一遍,从而选择最合适的.最基本就是一个排列组 ...

  7. Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)

    这道题是一道爬虫练习题,需要爬链接http://tieba.baidu.com/p/2166231880里的所有妹子图片,点进链接看一下,这位妹子是日本著名性感女演员--杉本由美,^_^好漂亮啊,赶紧 ...

  8. python写一个翻译的小脚本

    起因: 想着上学看不懂English的PDF感慨万分........ 然后就有了翻译的脚本. 截图: 代码: #-*- coding:'utf-8' -*- import requests impor ...

  9. 利用python写一个简单的小爬虫 爬虫日记(1)(好好学习)

    打开py的IDLE >>>import urllib.request >>>a=urllib.request.urlopen("http://www.ba ...

随机推荐

  1. 从Excel中导入数据时,提示“未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决办法

    注意,64位系统,用64位的补丁文件; https://www.cnblogs.com/A2008A/articles/2438962.html 操作系统:使用的是64位的Windows Server ...

  2. ASP.NET MVC学习系列(4)——MVC过滤器FilterAttribute

    1.概括 MVC提供的几种过滤器其实也是一种特性(Attribute),MVC支持的过滤器类型有四种,分别是:AuthorizationFilter(授权),ActionFilter(行为),Resu ...

  3. applicationSettings设置和appsttings

    applicationSettings 可以和sttings一样在配置文件中,设置参数.支持定义参数的类型“serializaAs=string”,并可以使用  . 语法. 可以使用.语法

  4. java 项目打jar包,用cmd运行,并且编写运行脚本

    项目是ideal编辑器的springboot项目的demo.打包就是在侧边栏,点击packge ,就会在target下生成jar包. 生成之后把 jar包放在一个文件夹中.新建一个txt文件,在txt ...

  5. 学号 20175329 2018-2019-3《Java程序设计》第八周学习总结

    学号 20175329 2018-2019-3<Java程序设计>第八周学习总结 教材学习内容总结 第十五章 泛型 可以使用"class 名称"声明一个类,为了和普通的 ...

  6. c++stack类的用法

    官方解释: LIFO stack Stacks are a type of container adaptor, specifically designed to operate in a LIFO ...

  7. 更多的贴片SOT-23三极管,请点击以下表格购买。

    更多的贴片SOT-23三极管,请点击以下表格购买. 型号 标识 电流 V数 极性 封装 购买链接 S9012 2T1 0.3A 20V PNP SOT-23 点击购买 S9013 J3 0.3A 25 ...

  8. 写个.net开发者的Linux迁移指南

    前言 为什么要迁移到Linux 首先我个人还是有点软件洁癖,以前是穷酸学生的时候也是用盗版的用户,后来在知乎被洗脑终于有了点版权意识.然后便有了能用开源软件的就用开源,实在不能就选社区版或者免费版.于 ...

  9. 关于mysql中unique的插入Duplicate key

    MySQL数据库中 如果在后台中不做判断是否unique的column是否存在的话,直接把数据操作给dao层再传给DB的话,就会报重复的唯一值.如果确实是不希望先取出判断unique的column是否 ...

  10. Cinder组件

    cinder-api cinder-api 是整个 Cinder 组件的门户,所有 cinder 的请求都首先由 cinder-api 处理. cinder-api 向外界暴露若干 HTTP REST ...