易函數(shù)視窗編程系統(tǒng)(一鍵編譯任意python腳本),由精易論壇制作開發(fā)的一個(gè)Python編程工具,功能強(qiáng)大,可以輕松編輯任意Python腳本,編寫環(huán)境更加親和,下面給出易函數(shù)視窗編程系統(tǒng)的詳細(xì)安裝教程以及下載資源鏈接,歡迎經(jīng)常編寫Python程序的朋友們下載體驗(yàn)。
運(yùn)行環(huán)境
window系統(tǒng) 或 mac os系統(tǒng)
python 3.7 及以上 anaconda 集成環(huán)境
代碼開發(fā)工具 Pycharm
Pycharm 中文提示插件
安裝步驟
1. 安裝 python anaconda 集成環(huán)境
到 anaconda 下載 python 運(yùn)行環(huán)境 最新版
我建議是安裝 3.7 的版本
2. 安裝 pycharm
下載社區(qū)版是免費(fèi)的
https://www.jetbrains.com/pycharm/
點(diǎn)擊下載社區(qū)版pycharm
3. 安裝 pycharm 插件 中文提示插件 以及 pycharm中文界面漢化包
搜索在插件中搜索 chinese 安裝兩個(gè)插件
4. 配置pip鏡像加速
在windows環(huán)境下修改pip鏡像源的方法
1.在windows文件管理器中,輸入**%APPDATA%**
2.在該目錄下新建pip文件夾,然后到pip文件夾里面去新建個(gè)pip.ini文件
在新建的pip.ini文件中輸入以下內(nèi)容,文件路徑
C:\Users\Administrator\AppData\Roaming\pip\pip.ini
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
5. 安裝 易函數(shù) pyefun
第一次安裝易函數(shù)時(shí)使用
pip install pyefun -i https://mirrors.aliyun.com/pypi/simple/
升級(jí)易函數(shù)時(shí)使用
pip install -U pyefun
6. 使用 pyefun 易函數(shù)
from pyefun import *
提示: 如果你的程序是需要打包編譯為exe的必須使用import pyefun as efun 而不能是import *
打包使用 Nuitka python打包工具使用教程
7. 安裝 易函數(shù)視窗編程系統(tǒng)
視頻教程 bilibili 易函數(shù)視窗編程系統(tǒng)安裝及使用教程
編寫功能代碼
import pyefun.wxefun as wx
import pyefun as efun
import pyefun.compile as compile
import webbrowser
class FileDrop(wx.FileDropTarget):
def __init__(self):
wx.FileDropTarget.__init__(self)
def OnDropFiles(self, x, y, filePath):
文件路徑 = filePath[0]
G.app.窗口1.選擇編譯文件路徑(文件路徑)
return True
compile.隱藏控制臺(tái)窗口()
class 窗口1(wx.窗口):
def __init__(self):
self.初始化界面()
def 初始化界面(self):
#########以下是創(chuàng)建的組件代碼#########
wx.窗口.__init__(self, None, title='易函數(shù)一鍵編譯任意python腳本工具 易函數(shù)代碼倉庫:https://gitee.com/duolabmeng666/pyefun', size=(732, 450), name='frame', style=541072449)
self.容器 = wx.容器(self)
self.Centre()
self.窗口1 = self
self.窗口1.播放次數(shù) = wx.播放次數(shù).循環(huán)播放
self.窗口1.位置 = wx.窗口位置.通常
self.標(biāo)簽1 = wx.標(biāo)簽(self.容器, size=(151, 32), pos=(6, 13), label='欲編譯的python文件路徑', style=2321)
self.編輯框_文件路徑 = wx.編輯框(self.容器, size=(459, 32), pos=(162, 6), value='', style=0)
self.編輯框_文件路徑.最大允許長度 = 0
self.按鈕_選擇python文件 = wx.按鈕(self.容器, size=(67, 32), pos=(637, 7), label='選擇')
self.按鈕_選擇python文件.綁定事件(wx.事件.被單擊, self.按鈕_選擇python文件_被單擊)
self.編輯框_日志框 = wx.編輯框(self.容器, size=(700, 180), pos=(6, 226), value='', style=1073741856)
self.編輯框_日志框.最大允許長度 = 0
self.編輯框_可執(zhí)行文件路徑 = wx.編輯框(self.容器, size=(459, 32), pos=(162, 88), value='', style=0)
self.編輯框_可執(zhí)行文件路徑.最大允許長度 = 0
self.按鈕_選課可執(zhí)行文件 = wx.按鈕(self.容器, size=(67, 32), pos=(637, 87), label='選擇')
self.按鈕_選課可執(zhí)行文件.綁定事件(wx.事件.被單擊, self.按鈕_選課可執(zhí)行文件_被單擊)
self.按鈕_打開應(yīng)用目錄 = wx.按鈕(self.容器, size=(140, 28), pos=(6, 46), label='打開編譯目錄')
self.按鈕_打開應(yīng)用目錄.綁定事件(wx.事件.被單擊, self.按鈕_打開應(yīng)用目錄_被單擊)
self.組合框1 = wx.組合框(self.容器, value='', pos=(7, 140), choices=[], style=wx.CB_READONLY)
self.組合框1.SetSize((140, 25))
self.組合框1.置列表項(xiàng)目(['mingw64編譯器', 'mingw32編譯器'])
self.按鈕_執(zhí)行查找依賴 = wx.按鈕(self.容器, size=(140, 28), pos=(6, 90), label='執(zhí)行查找依賴')
self.按鈕_執(zhí)行查找依賴.綁定事件(wx.事件.被單擊, self.按鈕_執(zhí)行查找依賴_被單擊)
self.選擇框_編譯 = wx.選擇框(self.容器, size=(140, 30), pos=(162, 140), label='編譯', style=wx.CHK_2STATE)
self.選擇框_自動(dòng)查找依賴 = wx.選擇框(self.容器, size=(140, 30), pos=(363, 140), label='自動(dòng)查找依賴', style=wx.CHK_2STATE)
self.按鈕_寫出編譯腳本 = wx.按鈕(self.容器, size=(140, 28), pos=(564, 183), label='寫出編譯腳本')
self.按鈕_寫出編譯腳本.綁定事件(wx.事件.被單擊, self.按鈕_寫出編譯腳本_被單擊)
self.編輯框_編譯目錄 = wx.編輯框(self.容器, size=(459, 32), pos=(162, 47), value='', style=0)
self.編輯框_編譯目錄.最大允許長度 = 0
self.按鈕7 = wx.按鈕(self.容器, size=(67, 32), pos=(637, 48), label='選擇')
self.按鈕7.綁定事件(wx.事件.被單擊, self.按鈕_選擇編譯目錄_被單擊)
self.按鈕_自動(dòng)檢查編譯環(huán)境 = wx.按鈕(self.容器, size=(140, 28), pos=(6, 183), label='自動(dòng)檢查編譯環(huán)境')
self.按鈕_自動(dòng)檢查編譯環(huán)境.綁定事件(wx.事件.被單擊, self.按鈕_查看環(huán)境_被單擊)
self.按鈕_開始編譯 = wx.按鈕(self.容器, size=(140, 28), pos=(564, 140), label='開始執(zhí)行')
self.按鈕_開始編譯.綁定事件(wx.事件.被單擊, self.按鈕_開始編譯_被單擊)
self.標(biāo)簽2 = wx.標(biāo)簽(self.容器, size=(171, 19), pos=(162, 188), label='如需幫助請(qǐng)看易函數(shù)的幫助文檔', style=2321)
self.標(biāo)簽2.字體 = wx.Font(9, 74, 90, 400, True, 'Microsoft YaHei UI', 28)
self.標(biāo)簽2.綁定事件(wx.事件.鼠標(biāo)左鍵被按下, self.標(biāo)簽2_鼠標(biāo)左鍵被按下)
self.標(biāo)簽3 = wx.標(biāo)簽(self.容器, size=(176, 19), pos=(359, 188), label='提問請(qǐng)到易函數(shù)的github或碼云', style=2321)
self.標(biāo)簽3.字體 = wx.Font(9, 74, 90, 400, True, 'Microsoft YaHei UI', 28)
self.標(biāo)簽3.綁定事件(wx.事件.鼠標(biāo)左鍵被按下, self.標(biāo)簽3_鼠標(biāo)左鍵被按下)
#########以上是創(chuàng)建的組件代碼##########
self.組合框1.置選中項(xiàng)(0)
self.選擇框_編譯.置選中狀態(tài)(True)
self.選擇框_自動(dòng)查找依賴.置選中狀態(tài)(True)
# 注冊(cè)拖放文件對(duì)象
self.fileDrop = FileDrop()
self.SetDropTarget(self.fileDrop)
#########以下是組件綁定的事件代碼#########
def 按鈕_選擇python文件_被單擊(self, event):
print("按鈕_選擇python文件_被單擊")
文件路徑 = wx.組件_文件選擇器()
self.選擇編譯文件路徑(文件路徑)
def 選擇編譯文件路徑(self, 文件路徑):
self.編輯框_文件路徑.內(nèi)容 = 文件路徑
編譯目錄 = efun.路徑優(yōu)化(efun.文件_取目錄(文件路徑) + r"/o")
self.編輯框_編譯目錄.內(nèi)容 = 編譯目錄
文件名 = efun.strCut(efun.文件_取文件名(文件路徑), "$.")
文件運(yùn)行路徑 = efun.路徑優(yōu)化(r"{1}\{0}.dist\{0}.exe".format(文件名, 編譯目錄))
self.編輯框_可執(zhí)行文件路徑.內(nèi)容 = 文件運(yùn)行路徑
def 按鈕_選擇編譯目錄_被單擊(self, event):
print("按鈕_選擇編譯目錄_被單擊")
文件路徑 = wx.組件_目錄選擇器()
self.編輯框_編譯目錄.內(nèi)容 = 文件路徑
def 按鈕_查看環(huán)境_被單擊(self, event):
self.選擇編譯器()
print("按鈕_查看環(huán)境_被單擊")
if compile.初始化編譯環(huán)境():
輸入到日志窗口("編譯器準(zhǔn)備完畢")
else:
輸入到日志窗口("自動(dòng)準(zhǔn)備編譯器失敗了 請(qǐng)配置好 python環(huán)境")
list = [
"運(yùn)行目錄 " + efun.取運(yùn)行目錄(),
"gcc版本 " + compile.取gcc版本(),
"nuitka版本 " + compile.取nuitka版本(),
"python版本 " + compile.取python版本(),
"python路徑 " + compile.取python執(zhí)行路徑(),
"python包路徑 " + compile.取pythonSitePackages目錄(),
]
print(list)
wx.MessageBox("\n".join(list))
def 按鈕_打開應(yīng)用目錄_被單擊(self, event):
print("按鈕_打開應(yīng)用目錄_被單擊")
compile.運(yùn)行命令("explorer.exe " + self.編輯框_編譯目錄.內(nèi)容)
def 選擇編譯器(self):
item = self.組合框1.取選中項(xiàng)文本()
if item == "mingw64編譯器":
pass
編譯器目錄 = efun.路徑優(yōu)化(efun.取運(yùn)行目錄() + "/bulidLib/mingw64/bin")
if not efun.文件是否存在(編譯器目錄):
編譯器目錄 = ""
if item == "mingw32編譯器":
pass
編譯器目錄 = efun.路徑優(yōu)化(efun.取運(yùn)行目錄() + "/bulidLib/mingw32/bin")
if not efun.文件是否存在(編譯器目錄):
編譯器目錄 = ""
if 編譯器目錄 != "":
compile.編譯器配置.默認(rèn)編譯器路徑 = 編譯器目錄
def 按鈕_開始編譯_被單擊(self, event):
if self.編輯框_文件路徑.內(nèi)容 == "":
return
if self.編輯框_編譯目錄.內(nèi)容 == "":
return
文件路徑 = self.編輯框_文件路徑.內(nèi)容
編譯目錄 = self.編輯框_編譯目錄.內(nèi)容
文件目錄 = efun.路徑優(yōu)化(efun.文件_取目錄(文件路徑))
文件名 = efun.strCut(efun.文件_取文件名(文件路徑), "$.")
if 編譯目錄 == "":
編譯目錄 = efun.路徑優(yōu)化(efun.文件_取目錄(文件路徑) + r"/o")
文件運(yùn)行路徑 = efun.路徑優(yōu)化(r"{1}\{0}.dist\{0}.exe".format(文件名, 編譯目錄))
self.編輯框_可執(zhí)行文件路徑.內(nèi)容 = 文件運(yùn)行路徑
self.選擇編譯器()
print("按鈕_開始編譯_被單擊")
if compile.初始化編譯環(huán)境():
輸入到日志窗口("編譯器準(zhǔn)備完畢")
輸入到日志窗口("開始編譯")
不編譯 = self.選擇框_編譯.是否選中() == False
不尋找依賴 = self.選擇框_自動(dòng)查找依賴.是否選中() == False
compile.編譯文件(
self.編輯框_文件路徑.內(nèi)容,
編譯目錄=self.編輯框_編譯目錄.內(nèi)容,
編譯器目錄="",
不編譯=不編譯,
不尋找依賴=不尋找依賴
)
else:
輸入到日志窗口("自動(dòng)準(zhǔn)備編譯器失敗了 請(qǐng)配置好 python環(huán)境")
def 按鈕_執(zhí)行查找依賴_被單擊(self, event):
print("按鈕_執(zhí)行查找依賴_被單擊")
文件運(yùn)行路徑 = self.編輯框_可執(zhí)行文件路徑.內(nèi)容
文件運(yùn)行目錄 = efun.文件_取目錄(文件運(yùn)行路徑)
while compile.自動(dòng)處理依賴缺失問題(文件運(yùn)行路徑, 文件運(yùn)行目錄):
pass
def 按鈕_選課可執(zhí)行文件_被單擊(self, event):
print("按鈕_選課可執(zhí)行文件_被單擊")
文件路徑 = wx.組件_文件選擇器()
self.編輯框_可執(zhí)行文件路徑.內(nèi)容 = 文件路徑
def 按鈕_寫出編譯腳本_被單擊(self, event):
print("按鈕_寫出編譯腳本_被單擊")
模板文件 = "" + efun.讀入文本(efun.路徑優(yōu)化(efun.取運(yùn)行目錄() + "/resources/scriptTpl.py"))
模板文件 = efun.子文本替換(模板文件, r'{{文件路徑}}', self.編輯框_文件路徑.內(nèi)容)
模板文件 = efun.子文本替換(模板文件, r'{{編譯目錄}}', self.編輯框_編譯目錄.內(nèi)容)
文件名 = efun.文件_取文件名(self.編輯框_文件路徑.內(nèi)容, False)
目錄 = efun.文件_取目錄(self.編輯框_文件路徑.內(nèi)容)
編譯文件路徑 = efun.路徑優(yōu)化(目錄 + "/編譯腳本_{}.py".format(文件名))
if not efun.文件是否存在(編譯文件路徑):
efun.寫到文件(編譯文件路徑, 模板文件)
輸入到日志窗口("編譯腳本寫出到 {}".format(編譯文件路徑))
else:
輸入到日志窗口("編譯文件已存在 {} 請(qǐng)刪除后再生成".format(編譯文件路徑))
def 標(biāo)簽2_鼠標(biāo)左鍵被按下(self, event):
print("標(biāo)簽2_鼠標(biāo)左鍵被按下")
webbrowser.open('https://www.kancloud.cn/duolabmeng/pyefundoc/content')
def 標(biāo)簽3_鼠標(biāo)左鍵被按下(self, event):
print("標(biāo)簽3_鼠標(biāo)左鍵被按下")
webbrowser.open('https://gitee.com/duolabmeng666/pyefun')
#########以上是組件綁定的事件代碼#########
class 應(yīng)用(wx.App):
def OnInit(self):
self.窗口1 = 窗口1()
self.窗口1.Show(True)
return True
class 全局變量:
app = None
isinstance(app, 應(yīng)用)
G = 全局變量
def 輸入到日志窗口(text):
pass
# print(text)
if (efun.取文本長度(G.app.窗口1.編輯框_日志框.內(nèi)容) > 10000):
G.app.窗口1.編輯框_日志框.內(nèi)容 = ""
G.app.窗口1.編輯框_日志框.write(efun.取現(xiàn)行時(shí)間().到文本() + " " + text + "\n")
wx.GetApp().Yield()
compile.日志.設(shè)置日志回調(diào)函數(shù)(輸入到日志窗口)
if __name__ == '__main__':
G.app = 應(yīng)用()
G.app.MainLoop()