python变成小软件_python转exe的小工具

"""Module implementing DPy2Exe."""

from PyQt5.QtCore importpyqtSlotfrom PyQt5.QtWidgets importQDialog, QMessageBox, QFileDialogfrom Ui_wmain importUi_Dialogimportpickle, sysfrom cx_Freeze importmainfrom os importpathclassDPy2Exe(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()defgetExeName(self, filename):'获得文件的默认exe名称'

return '.'.join(path.basename(filename).split('.')[:-1])

@pyqtSlot()defon_btnScript_clicked(self):"""脚本浏览"""filename, filter= QFileDialog.getOpenFileName(self, "从文件获取参数", self.leScript.text(), "参数文件 (*.py *.pyw)")if not filename: returnself.leScript.setText(filename)#生成默认可执行文件名

self.leTargetName.setText(self.getExeName(filename))

@pyqtSlot(bool)defon_cbUseDefDir_clicked(self, checked):"""是否使用默认目录"""self.setting['useDefDir'] =checkedifchecked:

self.leTargetDir.setEnabled(False)

self.btnTargetDir.setEnabled(False)else:

self.leTargetDir.setEnabled(True)

self.btnTargetDir.setEnabled(True)

@pyqtSlot(bool)defon_cbUseWin_clicked(self, checked):'是否使用窗口'self.setting['useWin'] =checked

@pyqtSlot()defon_btnTargetDir_clicked(self):"""目标目录浏览"""dirName= QFileDialog.getExistingDirectory(self, "选择目标目录", path.dirname(self.leScript.text()),

QFileDialog.Options(QFileDialog.ShowDirsOnly))if not dirName: returnself.leTargetDir.setText(dirName)

@pyqtSlot()defon_btnIcon_clicked(self):"""图标浏览"""filename, filter= QFileDialog.getOpenFileName(self, "图标选取", self.leScript.text(), "图标文件 (*.ico)")if not filename: returnself.leIcon.setText(filename)

@pyqtSlot()defon_btnOpen_clicked(self):"""打开"""filename, filter= QFileDialog.getOpenFileName(self, "文件生成数据", "", "数据文件 (*.p2e)")if not filename: returnsetdict= pickle.load(open(filename, 'rb'))for key insetdict:

self.setting[key]=setdict[key]

self.updateSetting()

@pyqtSlot()defon_btnSave_clicked(self):"""保存"""filename, filter= QFileDialog.getSaveFileName(self, "文件生成数据", "newprj", "数据文件 (*.p2e)")if not filename: returnself.getSetting()

pickle.dump(self.setting, open(filename,'wb'))

@pyqtSlot()defon_btnGenerate_clicked(self):"""生成"""

#设定设置值

self.getSetting()#如果没有主脚本则提示并返回

if not path.exists(self.setting['script']):

QMessageBox.warning(self,'主代码错误', '缺少主代码,或者主代码不存在!')returnargv= [self.setting['script']]for key inself.setKeys:ifself.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 =logfileprint(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()defgetSetting(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()defupdateSetting(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__":importsysfrom PyQt5.QtWidgets importQApplication

app=QApplication(sys.argv)

dlg=DPy2Exe()

dlg.show()

sys.exit(app.exec_())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值