python转exe的小工具
其实只是在cxfreeze的基础上加了个壳,做成窗口软件了
使用了pyqt做的界面,软件发布在了开源中国上,可以直接去下面的地址查看
http://git.oschina.net/robocky/py2exe_win
"""
Module implementing DPy2Exe.
""" from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import QDialog, QMessageBox, QFileDialog from Ui_wmain import Ui_Dialog import pickle, sys
from cx_Freeze import main
from os import path class DPy2Exe(QDialog, Ui_Dialog):
"""
python文件生成exe
"""
def __init__(self, parent=None):
"""
默认初始化
"""
super(DPy2Exe, self).__init__(parent)
self.setupUi(self)
self.setKeys = ['target-name', 'target-dir', 'base-name', 'icon']
self.setting = dict(zip(self.setKeys, ('', 'dist', '', '')))
self.setting['script'] = ''
self.setting['useDefDir'] = True
self.setting['useWin'] = True
self.updateSetting() def getExeName(self, filename):
'获得文件的默认exe名称'
return '.'.join(path.basename(filename).split('.')[:-1]) @pyqtSlot()
def on_btnScript_clicked(self):
"""
脚本浏览
"""
filename, filter = QFileDialog.getOpenFileName(self, "从文件获取参数", self.leScript.text(), "参数文件 (*.py *.pyw)")
if not filename: return
self.leScript.setText(filename)
#生成默认可执行文件名
self.leTargetName.setText(self.getExeName(filename)) @pyqtSlot(bool)
def on_cbUseDefDir_clicked(self, checked):
"""
是否使用默认目录
"""
self.setting['useDefDir'] = checked
if checked:
self.leTargetDir.setEnabled(False)
self.btnTargetDir.setEnabled(False)
else:
self.leTargetDir.setEnabled(True)
self.btnTargetDir.setEnabled(True) @pyqtSlot(bool)
def on_cbUseWin_clicked(self, checked):
'是否使用窗口'
self.setting['useWin'] = checked @pyqtSlot()
def on_btnTargetDir_clicked(self):
"""
目标目录浏览
"""
dirName = QFileDialog.getExistingDirectory(self, "选择目标目录", path.dirname(self.leScript.text()),
QFileDialog.Options(QFileDialog.ShowDirsOnly))
if not dirName: return
self.leTargetDir.setText(dirName) @pyqtSlot()
def on_btnIcon_clicked(self):
"""
图标浏览
"""
filename, filter = QFileDialog.getOpenFileName(self, "图标选取", self.leScript.text(), "图标文件 (*.ico)")
if not filename: return
self.leIcon.setText(filename) @pyqtSlot()
def on_btnOpen_clicked(self):
"""
打开
"""
filename, filter = QFileDialog.getOpenFileName(self, "文件生成数据", "", "数据文件 (*.p2e)")
if not filename: return
setdict = pickle.load(open(filename, 'rb'))
for key in setdict:
self.setting[key] = setdict[key]
self.updateSetting() @pyqtSlot()
def on_btnSave_clicked(self):
"""
保存
"""
filename, filter = QFileDialog.getSaveFileName(self, "文件生成数据", "newprj", "数据文件 (*.p2e)")
if not filename: return
self.getSetting()
pickle.dump(self.setting, open(filename, 'wb')) @pyqtSlot()
def on_btnGenerate_clicked(self):
"""
生成
"""
# 设定设置值
self.getSetting()
#如果没有主脚本则提示并返回
if not path.exists(self.setting['script']):
QMessageBox.warning(self, '主代码错误', '缺少主代码,或者主代码不存在!')
return
argv = [self.setting['script']]
for key in self.setKeys:
if self.setting[key]:
argv.append('--' + key)
argv.append(self.setting[key])
sys.argv[1:] = argv
curstdout = sys.stdout
curstderr = sys.stderr
logfile = open('genmsg.log', 'w')
sys.stderr = sys.stdout = logfile
print(argv)
try:
main()
except:
QMessageBox.warning(self, '生成错误', str(sys.exc_info()[1]))
else:
QMessageBox.information(self, '生成成功', '成功生成exe文件!')
sys.stdout = curstdout
sys.stderr = curstderr
logfile.close() def getSetting(self):
'从界面中获取设定值'
self.setting['script'] = self.leScript.text()
#如果选用默认目录则用脚本目录下的dist目录
if self.setting['useDefDir']:
self.setting['target-dir'] = path.dirname(self.setting['script']) + '/dist'
else:
self.setting['target-dir'] = self.leTargetDir.text()
self.setting['base-name'] = 'Win32GUI' if self.setting['useWin'] else ''
#判断当前的应用程序名称是否为默认值
if self.leTargetName.text() and self.leTargetName.text() != self.getExeName(self.setting['script']):
self.setting['target-name'] = self.leTargetName.text() + '.exe'
else:
self.setting['target-name'] = ''
self.setting['icon'] = self.leIcon.text() def updateSetting(self):
'将设定值更新到界面中'
self.leScript.setText(self.setting['script'])
self.leTargetDir.setText(self.setting['target-dir'])
self.leTargetName.setText(self.getExeName(self.setting['target-name']))
self.leIcon.setText(self.setting['icon'])
self.cbUseDefDir.setChecked(self.setting['useDefDir'])
self.cbUseWin.setChecked(self.setting['useWin'])
if self.setting['useDefDir']:
self.leTargetDir.setEnabled(False)
self.btnTargetDir.setEnabled(False)
else:
self.leTargetDir.setEnabled(True)
self.btnTargetDir.setEnabled(True) if __name__ == "__main__":
import sys
from PyQt5.QtWidgets import QApplication
app = QApplication(sys.argv)
dlg = DPy2Exe()
dlg.show()
sys.exit(app.exec_())
python转exe的小工具的更多相关文章
- python开发目录合并小工具 PathMerge
前言 这个程序陆陆续续开发了几天,正好我在学Python,就一边做一边学,倒是学到不少东西. 不得不说python是快速开发的好工具. 程序做了一些改进,这两天又忙着毕设,现在才想起来发到博客上.想想 ...
- python 3.6 MJ小工具
2017.07.14 update 做了个界面,不需要使用cmd命令行+文件路径的方式来使用了: 链接如下: http://www.cnblogs.com/chenyuebai/p/7150382.h ...
- 目不识丁的我使用Python编写汉字注音小工具
一万点暴击伤害 人懒起来太可怕了,放了个十一充分激发了我的惰性.然后公众号就这么停了半个月,好惭愧- 新学期儿子的幼儿园上线了APP,每天作业通过app布置后,家长需要陪着孩子学习,并上传视频才算完成 ...
- Python: tkinter实例改名小工具
#!/usr/bin/env python #coding=utf-8 # # 版权所有 2014 yao_yu (http://blog.csdn.net/yao_yu_126) # 本代码以MIT ...
- 入坑python 自己写的小工具,纪念一下
这个程序的功能是可以从表格中读取某一列数据,传到IDs 这一个参数里,然后在url中获取相应的请求值,并打印 import urllib.request import json import xlrd ...
- python一些实用的小工具
1 搭一个简易的本地局域网 python -m http.server 2 获取当前目录下的所有文件名 3 进度条效果 import sys,time for i in range(50): sy ...
- python之字符聊天小工具
server side: # coding: gb2312#socket server端#获取socket构造及常量from socket import *#''代表服务器为localhostmyHo ...
- 几个可以提高工作效率的Python内置小工具
在这篇文章里,我们将会介绍4个Python解释器自身提供的小工具.这些小工具在笔者的日常工作中经常用到,减少了各种时间的浪费,然而,却很容易被大家忽略.每当有新来的同事看到我这么使用时,都忍不住感叹, ...
- 【python】【开源】使用Tkinter和matplotlib实时显示图像,打造属于自己的性能测试小工具
在腾讯的perfdog工具还未公开时,当时需要查看内存使用情况等信息,就用python写了个小工具 为了提升开发效率,就直接借用了雷子开源的性能测试工具的布局,自己美化了一下,然后加入了实时显示数据的 ...
随机推荐
- jsonp案例
<button id="btn">click</button><script type="text/javascript"> ...
- Codeforces Round #361 Jul.6th A题 ☺译
A.迈克和手机 当迈克在沙滩上游泳的时候,他意外的把他的手机扔进了水里.不过你甭担心因为他立马买了个便宜些的代替品,这个代替品是老款九键键盘,这个键盘只有十个等大的数字按键,按以下方式排列: 1 2 ...
- input中加入搜索图标
刚吃了一份宫保鸡丁刀削面,幸福感满满,写篇博客消耗一下热量. 今天工作遇到的一个问题是在input输入框中加入图标,当输入内容后,图标和提示语一起隐藏,类似于placeholder的功能.如淘宝页面, ...
- 【HDU1257】最少拦截系统(贪心)
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- CodeIgniter 开发,支付宝接口调用实例
准备:1.alipay官方下载最新接口类库2.解压后,将目录"\即时到账交易接口-create_direct_pay_by_user\demo\create_direct_pay_by_us ...
- 介绍四款windows下的神器
四款神器:Q-dir, Cmder, Everything, launchy Q-dir Q-dir: windows自带资源管理器explorer的加强版.(windows自带的资料管理器explo ...
- 利用ffmpeg给小视频结尾增加logo水印
背景 1.app有类似微信拍摄小视频功能,时长上限8s,视频文件保存在第三方云存储,app直接上传,后端数据库只记录视频的存放地址. 2.最近一次功能迭代,增加了小视频下载功能,小视频有可能在别的社交 ...
- bzoj3316: JC loves Mkk
Description Input 第1行,包含三个整数.n,L,R.第2行n个数,代表a[1..n]. Output 仅1行,表示询问答案.如果答案是整数,就输出整数:否则,输出既约分数“P/Q”来 ...
- Linux的nm查看动态和静态库中的符号
功能 列出.o .a .so中的符号信息,包括诸如符号的值,符号类型及符号名称等.所谓符号,通常指定义出的函数,全局变量等等. 使用 nm [option(s)] [file(s)] 有用的optio ...
- Activity生命周期(深入理解)
今天看到一篇大神总结Activity的文章,内容甚为详细,特此转载http://www.cnblogs.com/lwbqqyumidi/p/3769113.html Android官方文档和其他不少资 ...