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_())
时间: 2024-10-15 20:02:34

python转exe的小工具的相关文章

更改Python下载源的小工具

Pip默认的源在国外,所以下载Python包的时候会比较慢,一般在几百KB左右,有时候只有十几kb.国内也有Pypi的镜像源,速度快的多,大概有2到3M的速度.最近看到一个自动切换国内源的小工具,很不错,分享一下. pqi 这个小工具叫做pqi,可以通过pip安装,官网链接https://github.com/yhangf/PyQuickInstall 安装 pip install pqi 列举所有支持的PyPi源 pqi ls 改变PyPi源 pqi use <name>,比如运行pqi u

python制作英语翻译小工具

用python爬虫可以制作英语翻译小工具.来看下代码吧- import requests,json #函数封装 def translator(): session=requests.session() i=input('请问你要翻译什么?') url='http://fanyi.youdao.com/translate' headers={ 'Referer': 'http://fanyi.youdao.com/', 'User-Agent': 'Mozilla/5.0 (Macintosh;

Python集成网络诊断小工具(含有ping,tracert,tcping等小工具)

开发背景: 之前在一家IDC公司实习,负责服务器售后方面的,经常要使用ping,tracert,tcping等命令做些初步的诊断,判断服务器问题出在哪方面.于是就想集成这些常用的命令或工具到一个GUI界面中,实现一键调用.(PS:当然公司有更好的集成工具,我只是模仿公司的) 开发环境: win 7 64位,Python 3.6.2,wxpython 具体思路: 通过wxpython实现GUI界面,通过subprocess.Popen创建新进程执行dos命令实现工具的调用. 功能实现: GUI 界

使用wxPython制作GUI小工具

我们项目客户端能看到的服务器列表由一个叫IPList.txt文本文件提供,每次启动客户端都会从CDN下载最新版本的IPList.txt.前两天运营同学那边提过来一个小工具需求,公测时对各个渠道需要提供不同的IPList.txt,如果临时加开新服或者修改老服状态(火爆/拥挤/顺畅),时间紧急手动修改容易出错,希望能有可视化工具修改. 这项工作到我手上之后,大致思索了下,决定用Python实现.用Python写过一些小工具,但没有做过GUI,查了下资料,采用了推荐比较多的wxPython库.工具逻辑

Python实现linux/windows通用批量‘命令/上传/下载’小工具

这阵子一直在学python,碰巧最近想把线上服务器环境做一些规范化/统一化,于是便萌生了用python写一个小工具的冲动.就功能方面来说,基本上是在"重复造轮子"吧,但是当我用这小工具完成了30多台服务器从系统层面到应用层面的一些规范化工作之后,觉得效果还不算那么low(高手可忽略这句话~~),这才敢拿出来跟小伙伴们分享一下. (注:笔者所用为python版本为3.5,其他版本未经测试~~) 其实很简单,就"一个脚本"+"server信息文件"实

Python 小工具集合

PyTools Python小工具的集合,工具彼此间无联系.基于Python 3.4. Github 地址: https://github.com/ChenZhongPu/PyTools 目前实现了: 查看新闻 查看微博 发布微博 搜索1024网站 Usage 查看新闻 python3 App.py news 使用腾讯新闻的RSS源. 查看微博 python3 App.py weibo 使用了Yahoo pipes.你需要得到要查看用户的微博ID, "` Hanhan's weibo accou

用Python写个自动ssh登录远程服务器的小工具

很多时候我们喜欢在自己电脑的终端直接ssh连接Linux服务器,而不喜欢使用那些有UI界面的工具区连接我们的服务器.可是在终端使用ssh我们每次都需要输入账号和密码,这也是一个烦恼,所以我们可以简单的打造一个在Linux/Mac os运行的自动ssh登录远程服务器的小工具.来个GIF动画示例下先: 概述 我们先理一下我们需要些什么功能: 1. 添加/删除连接服务器需要的IP,端口,密码 2. 自动输入密码登录远程服务器 对,我们就做这么简单的功能 开始写代码代码比较长,所以我也放在在Github

python的实战:一个目录一键启动管理小工具

简单的学习了几天的python,总觉得最好根据自身的需求来做点小工具实战一下. 上班的时候由于有很多目录需要打开.每次都要一个个的找那些目录.我觉得,我需要一个小工具.然后登记下,所有需要打开的目录.然后可以很方便的一键打开所有的目录或者是有哪些文件.然后登记一下.可以一次性打开所有登记的目标每次打开工具时,需要读取xml的数据.每增加一条数据要写入到xml中.这样我们即使部使用辅助工具去添加记录.直接修改xml文件的数据来增加记录也是可以的.具体实现如下 import os import xm

Python实现翻译小工具

一.背景 利用Requests模块获取有道词典web页面的post信息,BeautifulSoup来获取需要的内容,通过tkinter模块生成gui界面. 二.代码 fanyi.py代码如下: #!/bin/env python # -*- coding:utf-8 -*- # _author:kaliarch import requests import urllib.parse import time import random import hashlib import json clas