diff --git a/Musicreater.py b/Musicreater.py index 40132f3..89cdcb2 100644 --- a/Musicreater.py +++ b/Musicreater.py @@ -11,10 +11,10 @@ # 代码写的并非十分的漂亮,还请大佬多多包涵;本软件源代码依照Apache软件协议公开 - import json import os import shutil +import sys import threading import tkinter as tk import tkinter.filedialog @@ -24,10 +24,6 @@ import tkinter.simpledialog from msctspt.threadOpera import NewThread from nmcsup.vers import VER - - - - __version__ = VER[1]+VER[0] __author__ = 'W-YI (金羿)' @@ -35,15 +31,10 @@ __author__ = 'W-YI (金羿)' -import sys -# if sys.platform != 'win32': -# print("您当前的运行环境不符合要求。") -# print(__author__+" 音·创 当前版本"+__version__) -# print("按下回车退出程序") -# input() -# exit() + + @@ -71,7 +62,7 @@ print('建立变量,存入内存,载入字典常量函数') dataset=[ { 'mainset':{ - 'PackName':"Ryoun", + 'PackName':'Ryoun', 'MusicTitle':'Noname', 'IsRepeat':False, 'PlayerSelect':'' @@ -82,7 +73,7 @@ dataset=[ 'EntityName':'music_support', 'ScoreboardName':'music_support', 'Instrument':'harp', - 'FileName':"Music" + 'FileName':'Music' }, 'notes':[ [0.0,1.0], @@ -98,7 +89,7 @@ dataset=[ dataset = [ { 'mainset': { - 'PackName': "Ryoun", + 'PackName': 'Ryoun', 'MusicTitle': 'Noname', 'IsRepeat': False, 'PlayerSelect': '' @@ -109,7 +100,7 @@ dataset = [ 'EntityName': 'MusicSupport', 'ScoreboardName': 'MusicSupport', 'Instrument': 'note.harp', - 'FileName': "Music" + 'FileName': 'Music' }, 'notes': [ [0.0, 1.0], @@ -134,14 +125,14 @@ def DMM(): # 反回字典用于编辑 'EntityName': 'MusicSupport', 'ScoreboardName': 'MusicSupport', 'Instrument': 'note.harp', - 'FileName': "Music" + 'FileName': 'Music' }, 'notes': [] } return datasetmodelpart -print("完成") +print('完成') @@ -163,7 +154,7 @@ def __main__(): 若需转载或借鉴 请附作者\n ''' - print("音·创 正在启动……") + print('音·创 正在启动……') @@ -173,11 +164,11 @@ def __main__(): - print("更新执行位置...") + print('更新执行位置...') if sys.platform == 'win32': try: os.chdir(__file__[:len(__file__)-__file__[len(__file__)::-1].index('\\')]) - log("更新执行位置,当前文件位置"+__file__) + log('更新执行位置,当前文件位置 {}'.format(__file__)) except: pass else: @@ -185,7 +176,7 @@ def __main__(): os.chdir(__file__[:len(__file__)-__file__[len(__file__)::-1].index('/')]) except: pass - log("其他平台:"+sys.platform+"更新执行位置,当前文件位置"+__file__) + log('其他平台:{} 更新执行位置,当前文件位置 {}'.format(sys.platform,__file__)) print('完成!') @@ -194,13 +185,13 @@ def __main__(): # 读取文件 - print("载入文件读取函数") + print('载入文件读取函数') def ReadFile(fn:str) -> list: from nmcsup.nmcreader import ReadFile as fileRead k = fileRead(fn) if k == False : - tk.messagebox.showerror(title='错误', message="找不到文件😢:"+fn) + tk.messagebox.showerror(title="错误", message="找不到文件😢:{}".format(fn)) return else: return k @@ -210,7 +201,7 @@ def __main__(): from nmcsup.nmcreader import ReadMidi as midiRead k = midiRead(midfile) if k == False : - tk.messagebox.showerror(title='错误', message="找不到文件或无法读取文件😢:"+midfile) + tk.messagebox.showerror(title="错误", message="找不到文件或无法读取文件😢:{}".format(midfile)) return else: return k @@ -227,9 +218,9 @@ def __main__(): def exitapp(): global is_save if is_save != True: - if tkinter.messagebox.askyesno(title='提示', message='您当前的项目已修改但未存储,是否先保存当前项目?'): + if tkinter.messagebox.askyesno(title="提示❗", message="您当前的项目已修改但未存储,是否先保存当前项目?"): SaveProject() - log("程序正常退出") + log('程序正常退出') @@ -248,12 +239,12 @@ def __main__(): if clearLog : print("清除log(此句不载入日志)") try: - if os.path.exists("./log/"): - shutil.rmtree("./log/") - if os.path.exists("./logs/"): - shutil.rmtree("./logs/") - if os.path.exists("./cache/"): - shutil.rmtree("./cache/") + if os.path.exists('./log/'): + shutil.rmtree('./log/') + if os.path.exists('./logs/'): + shutil.rmtree('./logs/') + if os.path.exists('./cache/'): + shutil.rmtree('./cache/') except: print("无法清除日志及临时文件") @@ -272,10 +263,10 @@ def __main__(): return else: # 旧项目旧存着吧 - log("存储已有文件:"+ProjectName) + log('存储已有文件:{}'.format(ProjectName)) with open(ProjectName, 'w', encoding='utf-8') as f: json.dump(dataset[0], f) - tkinter.messagebox.showinfo(title='已存储', message='项目已经存储至:'+ProjectName) + tkinter.messagebox.showinfo(title="已存储", message="项目已经存储至:{}".format(ProjectName)) global is_save is_save = True @@ -285,16 +276,13 @@ def __main__(): def SaveAsProject(): # 另存为项目 - log("另存项目") - fn = tkinter.filedialog.asksaveasfilename(title='新建 音·创 项目', initialdir=r'./', filetypes=[('音·创工程文件', '.msct'), ('任意类型', '*')], defaultextension='Noname.msct') + fn = tkinter.filedialog.asksaveasfilename(title="新建 音·创 项目", initialdir=r'./', filetypes=[("音·创工程文件", '.msct'), ("任意类型", '*')], defaultextension='Noname.msct') if fn == None or fn =='': - log("取消") return ProjectName = fn - log("新建文件:"+ProjectName) with open(ProjectName, 'w', encoding='utf-8') as f: json.dump(dataset[0], f) - tkinter.messagebox.showinfo(title='已存储', message='项目已经存储至:'+ProjectName) + tkinter.messagebox.showinfo(title="已存储", message="项目已经存储至:{}".format(ProjectName)) global is_save is_save = True @@ -303,46 +291,38 @@ def __main__(): def openOldProject(): - log("打开旧版本项目") global is_save if is_save != True: - result = tkinter.messagebox.askyesno(title='提示', message='您当前的项目已修改但未存储,是否先保存当前项目?') - log('询问是否存储:'+str(result)) + result = tkinter.messagebox.askyesno(title="提示❗", message="您当前的项目已修改但未存储,是否先保存当前项目?") if result: SaveProject() - fn = tkinter.filedialog.askopenfilename(title='请选择旧类型的项目', initialdir=r'./', filetypes=[('函数音创工程文件', '.ry.nfc'), ('MMFM0.0.6版本工程文件', '.ry.mfm'), ('全部类型', '*')], multiple=True) + fn = tkinter.filedialog.askopenfilename(title="请选择旧类型的项目", initialdir=r'./', filetypes=[("函数音创工程文件", '.ry.nfc'), ("MMFM0.0.6版本工程文件", '.ry.mfm'), ("全部类型", '*')], multiple=True) if fn == None or fn == '': - log("取消") return else: fn = fn[0] - log("读取文件:"+fn) from nmcsup.nmcreader import ReadOldProject dataset[0] = ReadOldProject(fn) def openProject(): - log("打开音·创项目") global is_save if is_save != True: - result = tkinter.messagebox.askyesno(title='提示', message='您当前的项目已修改但未存储,是否先保存当前项目?') - log('询问是否存储:'+str(result)) + result = tkinter.messagebox.askyesno(title="提示❗", message="您当前的项目已修改但未存储,是否先保存当前项目?") if result: SaveProject() - fn = tkinter.filedialog.askopenfilename(title='请选择 音·创 项目', initialdir=r'./', filetypes=[('音·创工程文件', '.msct'),('全部类型', '*')], multiple=True) + fn = tkinter.filedialog.askopenfilename(title="请选择 音·创 项目", initialdir=r'./', filetypes=[("音·创工程文件", '.msct'),("全部类型", '*')], multiple=True) if fn == None or fn == '': - log("取消") return else: fn = fn[0] - log("读取文件:"+fn) try: with open(fn, 'r', encoding='UTF-8') as c: dataset[0] = json.load(c) except: - print('无法打开文件:'+fn+",请查看您是否输入正确") - log("无法打开"+fn) + print("无法打开文件:{},请查看您是否输入正确".format(fn)) + log('无法打开{}'.format(fn)) return global is_new_file global ProjectName @@ -359,26 +339,26 @@ def __main__(): def appabout(): aabw = tk.Tk() - aabw.title(u'音·创 - 关于') + aabw.title("音·创 - 关于") aabw.geometry('400x600') # 像素 tk.Label(aabw, text='', font=('', 15)).pack() - tk.Label(aabw, text='我的世界音·创', font=('', 35)).pack() - tk.Label(aabw, text='当前版本:'+VER[1]+VER[0], font=('', 15)).pack() + tk.Label(aabw, text="我的世界音·创", font=('', 35)).pack() + tk.Label(aabw, text="当前版本:{}".format(VER[1]+VER[0]), font=('', 15)).pack() # pack 的side可以赋值为LEFT RTGHT TOP BOTTOM # grid 的row 是列数、column是行排,注意,这是针对空间控件本身大小来的,即是指向当前控件的第几个。 # place的 x、y是(x,y)坐标 - #pic = tk.PhotoImage(file="./bin/pics/Ryoun_S.png") + #pic = tk.PhotoImage(file='./bin/pics/Ryoun_S.png') #tk.Label(aabw, image=pic, width=200, height=200).pack() #del pic tk.Label(aabw, text='', font=('', 5)).pack() - tk.Label(aabw, text='凌云我的世界开发团队', font=('', 20)).pack() - tk.Label(aabw, text='×', font=('', 20)).pack() - tk.Label(aabw, text='凌云软件开发团队', font=('', 20)).pack() + tk.Label(aabw, text="凌云我的世界开发团队", font=('', 20)).pack() + tk.Label(aabw, text="×", font=('', 20)).pack() + tk.Label(aabw, text="凌云软件开发团队", font=('', 20)).pack() tk.Label(aabw, text='', font=('', 15)).pack() - tk.Label(aabw, text='唯一开发者:金羿(W-YI)', font=('', 15)).pack() - tk.Label(aabw, text='Email: EillesWan@outlook.com', font=('', 15)).pack() - tk.Label(aabw, text='QQ: 2647547478', font=('', 15)).pack() - tk.Label(aabw, text='讨论群: 861684859', font=('', 15)).pack() + tk.Label(aabw, text="唯一开发者:金羿(W-YI)", font=('', 15)).pack() + tk.Label(aabw, text="Email: EillesWan@outlook.com", font=('', 15)).pack() + tk.Label(aabw, text="QQ: 2647547478", font=('', 15)).pack() + tk.Label(aabw, text="讨论群: 861684859", font=('', 15)).pack() aabw.mainloop() @@ -388,7 +368,7 @@ def __main__(): def apphelp(): ahpw = tk.Tk() - ahpw.title(u'音·创 - 帮助') + ahpw.title("音·创 - 帮助") ahpw.geometry('400x600') # 像素 ahpw.mainloop() @@ -398,20 +378,19 @@ def __main__(): def FromMP3(): - log("从MP3导入音乐"); - mp3file = tkinter.filedialog.askopenfilename(title='请选择钢琴声音的 MP3 文件', initialdir=r'./', filetypes=[('钢琴声音的MP3', '.mp3'), ('全部类型', '*')], multiple=True) + log('从MP3导入音乐') + mp3file = tkinter.filedialog.askopenfilename(title="请选择钢琴声音的 MP3 文件", initialdir=r'./', filetypes=[("钢琴声音的音频文件", '.mp3 .m4a'), ("全部类型", '*')], multiple=True) if mp3file == None or mp3file == '': - log("取消") + log('取消') return else: mp3file = mp3file[0] - log("转换mp3文件"+mp3file) from nmcsup.nmcreader import ReadMidi from nmcsup.trans import Mp32Mid if not os.path.exists('./Temp/'): os.makedirs('./Temp/') Mp32Mid(mp3file,'./Temp/Trans.mid') - log("打开midi文件./Temp/Trans.mid") + log('打开midi文件./Temp/Trans.mid') th = NewThread(ReadMidi, ('./Temp/Trans.mid',)) th.start() del mp3file @@ -429,18 +408,17 @@ def __main__(): threading.Thread(target=midiSPT, args=(th,)).start() del th - print("读MP3加载完成") + print('读MP3加载完成') def FromMidi(): - log("从midi导入音乐") - midfile = tkinter.filedialog.askopenfilename(title='请选择 MIDI 文件', initialdir=r'./', filetypes=[('Midi文件', '.mid .midi'), ('全部类型', '*')], multiple=True) + log('从midi导入音乐') + midfile = tkinter.filedialog.askopenfilename(title="请选择 MIDI 文件", initialdir=r'./', filetypes=[("Midi文件", '.mid .midi'), ("全部类型", '*')], multiple=True) if midfile == None or midfile == '': - log("取消") + log('取消') return else: midfile = midfile[0] - log("开新线程打开midi文件"+midfile) th = NewThread(ReadMidi, (midfile,)) th.start() del midfile @@ -463,14 +441,13 @@ def __main__(): def FromForm(): - log("从文本读入音轨") - fn = tkinter.filedialog.askopenfilename(title='请选择 音符文本 文件', initialdir=r'./', filetypes=[('文本文件', '.txt'), ('全部类型', '*')], multiple=True) + log('从文本读入音轨') + fn = tkinter.filedialog.askopenfilename(title="请选择 音符文本 文件", initialdir=r'./', filetypes=[("文本文件", '.txt'), ("全部类型", '*')], multiple=True) if fn == None or fn =='': - log("取消") + log('取消') return else: fn = fn[0] - log("打开音符文件"+fn) th = NewThread(ReadFile, (fn,)) th.start() def midiSPT(th): @@ -491,14 +468,14 @@ def __main__(): def FromText(): - log("写入音符至音轨") - dat = tkinter.simpledialog.askstring(title='获取信息', prompt='请输入音符:', initialvalue='`1 .2 C') + log('写入音符至音轨') + dat = tkinter.simpledialog.askstring(title="获取信息", prompt="请输入音符:", initialvalue='`1 .2 C') if dat == None: return datas = [] - for i in dat.split(" "): + for i in dat.split(' '): datas.append([str(i), 1.0]) - log('音符数据写入'+str(datas)) + log("音符数据写入{}".format(str(datas))) from nmcsup.trans import note2list datat = DMM() datat['notes'] = note2list(datas) @@ -516,55 +493,58 @@ def __main__(): def ShowCMD(): - log("展示指令") + log('展示指令') global NowMusic from nmcsup.trans import Note2Cmd RefreshCMDList(Note2Cmd(dataset[0]['musics'][NowMusic]['notes'],dataset[0]['musics'][NowMusic]['set']['ScoreboardName'],dataset[0]['musics'][NowMusic]['set']['Instrument'],dataset[0]['mainset']['PlayerSelect'])) def MakeCMD(): - log("生成文件") + log('生成文件') from msctspt.funcOpera import makeFuncFiles - file = tkinter.filedialog.askdirectory(title='请选择文件生成的位置', initialdir=r'./') + file = tkinter.filedialog.askdirectory(title="请选择文件生成的位置", initialdir=r'./') if file == None or file =='': - log("取消") - return; + log('取消') + return else: makeFuncFiles(dataset[0], file+'/') def MakeCMDdir(): - log("生成函数包") + log('生成函数包') from msctspt.funcOpera import makeFunDir - file = tkinter.filedialog.askdirectory(title='请选择文件夹生成的位置', initialdir=r'./') + file = tkinter.filedialog.askdirectory(title="请选择文件夹生成的位置", initialdir=r'./') if file == None or file =='': - log("取消") - return; + log('取消') + return else: makeFunDir(dataset[0], file+'/') def MakePackFile(): - file = tkinter.filedialog.askdirectory(title='请选择.mcpack文件生成的位置', initialdir=r'./') + file = tkinter.filedialog.askdirectory(title="请选择.mcpack文件生成的位置", initialdir=r'./') if file == None or file =='': - log("取消") - return; + log('取消') + return import zipfile from msctspt.funcOpera import makeFunDir - log("生成附加包文件") + log('生成附加包文件') if not os.path.exists('./temp/'): os.makedirs('./temp/') makeFunDir(dataset[0], './temp/') - shutil.move('./temp/'+dataset[0]['mainset']['PackName'] +"Pack/behavior_packs/"+dataset[0]['mainset']['PackName']+"/functions",'./') - shutil.move('./temp/'+dataset[0]['mainset']['PackName'] +"Pack/behavior_packs/"+dataset[0]['mainset']['PackName']+"/manifest.json",'./') - with zipfile.ZipFile(file+'/'+dataset[0]['mainset']['PackName']+'.mcpack', "w") as zipobj: + + shutil.move('./temp/{}Pack/behavior_packs/{}/functions'.format(dataset[0]['mainset']['PackName'],dataset[0]['mainset']['PackName']),'./') + + shutil.move('./temp/{}Pack/behavior_packs/{}/manifest.json'.format(dataset[0]['mainset']['PackName'],dataset[0]['mainset']['PackName']),'./') + + with zipfile.ZipFile('{}/{}.mcpack'.format(file,dataset[0]['mainset']['PackName']), 'w') as zipobj: for i in os.listdir('./functions/'): - zipobj.write('./functions/'+i) + zipobj.write('./functions/{}'.format(i)) zipobj.write('./manifest.json') shutil.move('./functions','./temp/') shutil.move('./manifest.json','./temp/') - shutil.rmtree("./temp/") + shutil.rmtree('./temp/') @@ -578,21 +558,21 @@ def __main__(): from nmcsup.trans import Cmd2World, Datas2BlkWorld, Notes2Player while True: try: - dire = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入坐标:',initialvalue = '16 4 16') + dire = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入坐标:",initialvalue = '16 4 16') if dire == None or dire == '': - return; + return dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] except: - tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入!"); + tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入!") continue break - Outdire = tkinter.filedialog.askdirectory(title='请选择世界文件夹生成的位置', initialdir=r'./'); + Outdire = tkinter.filedialog.askdirectory(title="请选择世界文件夹生成的位置", initialdir=r'./') if Outdire == None or Outdire == '': - log("取消") - return; + log('取消') + return else: - Outdire = Outdire[0]+'/'+dataset[0]['mainset']['PackName']+'/'; - with zipfile.ZipFile("./nmcsup/EptWorld.zip", "r") as zipobj: + Outdire = '{}/{}/'.format(Outdire[0],dataset[0]['mainset']['PackName']) + with zipfile.ZipFile('./nmcsup/EptWorld.zip', 'r') as zipobj: zipobj.extractall(Outdire) NoteData = [] for i in dataset[0]['musics']: @@ -611,20 +591,20 @@ def __main__(): from nmcsup.trans import Cmd2World, Datas2BlkWorld, Notes2Player while True: try: - dire = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入坐标:',initialvalue = '16 4 16') + dire = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入坐标:",initialvalue = '16 4 16') if dire == None or dire == '': return; dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] except: - tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入!"); + tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入!") continue break - Outdire = tkinter.filedialog.askdirectory(title='请选择世界文件夹生成的位置', initialdir=r'./'); + Outdire = tkinter.filedialog.askdirectory(title="请选择世界文件夹生成的位置", initialdir=r'./') if Outdire == None or Outdire == '': - log("取消") - return; + log('取消') + return else: - Outdire+='/'; + Outdire+='/' NoteData = [] for i in dataset[0]['musics']: NoteData.append(i['notes']) @@ -641,7 +621,7 @@ def __main__(): def MakeFuncPlayer(): while True: try: - dire = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入坐标:',initialvalue = '16 4 16') + dire = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入坐标:",initialvalue = '16 4 16') if dire == None or dire == '': return; dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] @@ -649,11 +629,11 @@ def __main__(): tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入!"); continue break - Outdire = tkinter.filedialog.askdirectory(title='请选择函数包生成的位置', initialdir=r'./'); + Outdire = tkinter.filedialog.askdirectory(title="请选择函数包生成的位置", initialdir=r'./'); if Outdire == None or Outdire == '': return; else: - Outdire+='/'+dataset[0]['mainset']['PackName']+'/'; + Outdire = '{}/{}/'.format(Outdire,dataset[0]['mainset']['PackName']) from nmcsup.trans import Notes2Player for i in range(len(dataset[0]['musics'])): open(Outdire+dataset[0]['musics'][i]['set']['FileName']+'_'+str(i)+'.mcfunction','w',encoding='utf-8').writelines(Notes2Player(dataset[0]['musics'][i]['notes'],[dire[0],dire[1],dire[2]+i],{'Ent':dataset[0]['musics'][i]['set']['EntityName'],'Pls':dataset[0]['mainset']['PlayerSelect'],'Ins':dataset[0]['musics'][i]['set']['Instrument']})) @@ -669,7 +649,7 @@ def __main__(): from nmcsup.trans import Cmd2World, Note2Cmd while True: try: - dire = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入坐标:',initialvalue = '16 4 16'); + dire = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入坐标:",initialvalue = '16 4 16'); if dire == None or dire == '': return; dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]; @@ -677,16 +657,16 @@ def __main__(): tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入!"); continue; break; - Outdire = tkinter.filedialog.askdirectory(title='请选择世界文件夹生成的位置', initialdir=r'./'); + Outdire = tkinter.filedialog.askdirectory(title="请选择世界文件夹生成的位置", initialdir=r'./'); if Outdire == None or Outdire == '': return; else: Outdire+='/'+dataset[0]['mainset']['PackName']+'/'; - with zipfile.ZipFile("./nmcsup/EptWorld.zip", "r") as zipobj: + with zipfile.ZipFile('./nmcsup/EptWorld.zip', 'r') as zipobj: zipobj.extractall(Outdire); for i in range(len(dataset[0]['musics'])): Cmd2World(Note2Cmd(dataset[0]['musics'][i]['notes'],dataset[0]['musics'][i]['set']['ScoreboardName'],dataset[0]['musics'][i]['set']['Instrument'],dataset[0]['mainset']['PlayerSelect'],True),Outdire,[dire[0],dire[1],dire[2]+i]) - del dire,Outdire; + del dire,Outdire @@ -695,7 +675,7 @@ def __main__(): from nmcsup.trans import Cmd2World, Note2Cmd while True: try: - dire = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入坐标:',initialvalue = '16 4 16') + dire = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入坐标:",initialvalue = '16 4 16') if dire == None or dire == '': return; dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] @@ -703,14 +683,14 @@ def __main__(): tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入!"); continue break - Outdire = tkinter.filedialog.askdirectory(title='请选择世界文件夹生成的位置', initialdir=r'./'); + Outdire = tkinter.filedialog.askdirectory(title="请选择世界文件夹生成的位置", initialdir=r'./'); if Outdire == None or Outdire == '': - return; + return else: - Outdire+='/'; + Outdire+='/' for i in range(len(dataset[0]['musics'])): Cmd2World(Note2Cmd(dataset[0]['musics'][i]['notes'],dataset[0]['musics'][i]['set']['ScoreboardName'],dataset[0]['musics'][i]['set']['Instrument'],dataset[0]['mainset']['PlayerSelect'],True),Outdire,[dire[0],dire[1],dire[2]+i]) - del dire,Outdire; + del dire,Outdire @@ -721,7 +701,7 @@ def __main__(): from nmcsup.trans import Cmd2World while True: try: - dire = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入坐标:',initialvalue = '16 4 16') + dire = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入坐标:",initialvalue = '16 4 16') if dire == None or dire == '': return; dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] @@ -729,19 +709,19 @@ def __main__(): tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入!"); continue break - Outdire = tkinter.filedialog.askdirectory(title='请选择世界文件夹生成的位置', initialdir=r'./'); + Outdire = tkinter.filedialog.askdirectory(title="请选择世界文件夹生成的位置", initialdir=r'./'); if Outdire == None or Outdire == '': return; else: Outdire+='/'; - Cmd2World(open(tkinter.filedialog.askopenfilename(title='请选择 .mcfunction 文件', initialdir=r'./', filetypes=[('我的世界指令函数文件', '.mcfunction'), ('全部类型', '*')], multiple=True)[0],'r',encoding='utf-8').readlines(),Outdire,dire) + Cmd2World(open(tkinter.filedialog.askopenfilename(title="请选择 .mcfunction 文件", initialdir=r'./', filetypes=[("我的世界指令函数文件", '.mcfunction'), ("全部类型", '*')], multiple=True)[0],'r',encoding='utf-8').readlines(),Outdire,dire) #大函数分割并载入执行链 def bigFunc2World(): - log("分割大函数") + log('分割大函数') import uuid from msctspt.funcOpera import funSplit @@ -749,7 +729,7 @@ def __main__(): from nmcsup.trans import Cmd2World while True: try: - dire = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入执行链生成坐标:',initialvalue = '16 4 16'); + dire = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入执行链生成坐标:",initialvalue = '16 4 16'); if dire == None or dire == '': return; dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]; @@ -757,50 +737,50 @@ def __main__(): tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入。"); continue break - Outdire = tkinter.filedialog.askdirectory(title='请选择世界文件夹生成的位置', initialdir=r'./'); + Outdire = tkinter.filedialog.askdirectory(title="请选择世界文件夹生成的位置", initialdir=r'./'); if Outdire == None or Outdire == '': - log("取消") - return; + log('取消') + return else: Outdire+='/'; - log("获得地图地址:"+Outdire) - fileName = tkinter.filedialog.askopenfilename(title='请选择 .mcfunction 文件', initialdir=r'./', filetypes=[('我的世界指令函数文件', '.mcfunction'), ('全部类型', '*')], multiple=True) + log('获得地图地址:'+Outdire) + fileName = tkinter.filedialog.askopenfilename(title="请选择 .mcfunction 文件", initialdir=r'./', filetypes=[("我的世界指令函数文件", '.mcfunction'), ("全部类型", '*')], multiple=True) if fileName == None or fileName == '': - log("取消") + log('取消') return; else: fileName = fileName[0] - log("获得文件名:"+fileName) + log('获得文件名:'+fileName) bigFile = open(fileName,'r',encoding='utf-8') parts = funSplit(bigFile) if parts == -1: - tkinter.messagebox.showerror(title="错误❌", message="您的函数文件不大于10k条指令,无需进行分割操作。"); + tkinter.messagebox.showerror(title="错误❌", message="您的函数文件不大于一万条指令,无需进行分割操作。"); return; - log("创建函数文件夹") + log('创建函数文件夹') packName = fileName[len(fileName)-fileName[::-1].index('/'):fileName.index('.')] packDire = hans2pinyin(packName) try: - os.makedirs(Outdire+"behavior_packs/"+packDire+"/functions/"); + os.makedirs(Outdire+'behavior_packs/'+packDire+'/functions/'); except: - log("已存在文件夹") - log("创建manifest.json以及world_behavior_packs.json") + log('已存在文件夹') + log('创建manifest.json以及world_behavior_packs.json') behaviorUuid = uuid.uuid4() - if os.path.exists(Outdire+"world_behavior_packs.json"): - with open(Outdire+"world_behavior_packs.json", "r") as f: + if os.path.exists(Outdire+'world_behavior_packs.json'): + with open(Outdire+'world_behavior_packs.json', 'r') as f: have = json.load(f) - have.append({"pack_id": str(behaviorUuid), "version": [ 0, 0, 1 ]}) - with open(Outdire+"world_behavior_packs.json", "w",encoding="utf-8") as f: + have.append({'pack_id': str(behaviorUuid), 'version': [ 0, 0, 1 ]}) + with open(Outdire+'world_behavior_packs.json', 'w',encoding='utf-8') as f: json.dump(have,f) del have else: - with open(Outdire+"world_behavior_packs.json", "w",encoding="utf-8") as f: - f.write("[\n {\"pack_id\": \"" + str(behaviorUuid) +"\",\n \"version\": [ 0, 0, 1 ]}\n]") - with open(Outdire+"behavior_packs/"+packDire+"/manifest.json", "w") as f: - f.write("{\n \"format_version\": 1,\n \"header\": {\n \"description\": \""+packName+" Pack : behavior pack\",\n \"version\": [ 0, 0, 1 ],\n \"name\": \""+packName+"Pack\",\n \"uuid\": \"" + str(behaviorUuid) + "\"\n },\n \"modules\": [\n {\n \"description\": \""+packName+" Pack : behavior pack\",\n \"type\": \"data\",\n \"version\": [ 0, 0, 1 ],\n \"uuid\": \"" + str(uuid.uuid4()) + "\"\n }\n ]\n}") + with open(Outdire+'world_behavior_packs.json', 'w',encoding='utf-8') as f: + f.write('[\n {\'pack_id\': \'' + str(behaviorUuid) +'\',\n \'version\': [ 0, 0, 1 ]}\n]') + with open(Outdire+'behavior_packs/'+packDire+'/manifest.json', 'w') as f: + f.write('{\n \'format_version\': 1,\n \'header\': {\n \'description\': \''+packName+' Pack : behavior pack\',\n \'version\': [ 0, 0, 1 ],\n \'name\': \''+packName+'Pack\',\n \'uuid\': \'' + str(behaviorUuid) + '\'\n },\n \'modules\': [\n {\n \'description\': \''+packName+' Pack : behavior pack\',\n \'type\': \'data\',\n \'version\': [ 0, 0, 1 ],\n \'uuid\': \'' + str(uuid.uuid4()) + '\'\n }\n ]\n}') cmdlist = [] for i in parts : - open(Outdire+"behavior_packs/"+packDire+"/functions/"+packDire+str(parts.index(i)+1)+".mcfunction",'w',encoding='utf-8').writelines(i); - cmdlist.append("function "+packDire+str(parts.index(i)+1)) + open(Outdire+'behavior_packs/'+packDire+'/functions/'+packDire+str(parts.index(i)+1)+'.mcfunction','w',encoding='utf-8').writelines(i); + cmdlist.append('function '+packDire+str(parts.index(i)+1)) Cmd2World(cmdlist,Outdire,dire) del cmdlist,behaviorUuid,Outdire,fileName,bigFile,parts,dire,packName,packDire @@ -811,7 +791,7 @@ def __main__(): from msctspt.transfer import note2bdx while True: try: - dire = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入执行链生成相对坐标:',initialvalue = '0 0 0'); + dire = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入执行链生成相对坐标:",initialvalue = '0 0 0'); if dire == None or dire == '': return; dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]; @@ -820,24 +800,24 @@ def __main__(): continue break - fileName = tkinter.filedialog.asksaveasfilename(title='请选择需要生成的.bdx文件', initialdir=r'./', filetypes=[('FastBuilder结构文件', '.bdx'), ('全部类型', '*')], defaultextension=dataset[0]['mainset']['PackName']+'.bdx',initialfile=dataset[0]['mainset']['PackName']+'.bdx') + fileName = tkinter.filedialog.asksaveasfilename(title="请选择需要生成的.bdx文件", initialdir=r'./', filetypes=[("FastBuilder结构文件", '.bdx'), ("全部类型", '*')], defaultextension=dataset[0]['mainset']['PackName']+'.bdx',initialfile=dataset[0]['mainset']['PackName']+'.bdx') if fileName == None or fileName == '': - log("取消") + log('取消') return; - log("获得文件名:"+fileName) + log('获得文件名:'+fileName) res = note2bdx(fileName,dire,dataset[0]['musics'][NowMusic]['notes'],dataset[0]['musics'][NowMusic]['set']['ScoreboardName'],dataset[0]['musics'][NowMusic]['set']['Instrument'],dataset[0]['mainset']['PlayerSelect']) log('转换结束!\n'+str(res)) - tkinter.messagebox.showinfo("生成结果",'转换结束!\n'+str(res)) + tkinter.messagebox.showinfo("完成!✔","转换结束!\n{}".format(str(res))) def wsPlay(): from msctspt.transfer import note2webs - spd = tkinter.simpledialog.askfloat("输入播放速度",prompt='一秒,音乐走几拍?',initialvalue = '5.0') - tkinter.messagebox.showinfo(title="创建中", message="请在游戏中使用connect指令连接localhost:8080,即可播放"); + spd = tkinter.simpledialog.askfloat("输入播放速度",prompt="一秒,音乐走几拍?",initialvalue = '5.0') + tkinter.messagebox.showinfo(title="创建中", message="按下确认后,在游戏中使用connect指令连接localhost:8080,即可播放") note2webs(dataset[0]['musics'][NowMusic]['notes'],dataset[0]['musics'][NowMusic]['set']['Instrument'],spd,dataset[0]['mainset']['PlayerSelect']) @@ -850,7 +830,7 @@ def __main__(): from msctspt.transfer import note2RSworld while True: try: - dire = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入坐标:',initialvalue = '16 4 16'); + dire = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入坐标:",initialvalue = '16 4 16'); if dire == None or dire == '': return; dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])]; @@ -858,12 +838,12 @@ def __main__(): tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入!"); continue; break; - Outdire = tkinter.filedialog.askdirectory(title='请选择世界文件夹生成的位置', initialdir=r'./'); + Outdire = tkinter.filedialog.askdirectory(title="请选择世界文件夹生成的位置", initialdir=r'./'); if Outdire == None or Outdire == '': return; else: Outdire+='/'+dataset[0]['mainset']['PackName']+'/'; - with zipfile.ZipFile("./nmcsup/EptWorld.zip", "r") as zipobj: + with zipfile.ZipFile('./nmcsup/EptWorld.zip', 'r') as zipobj: zipobj.extractall(Outdire); for i in range(len(dataset[0]['musics'])): note2RSworld(Outdire,dire,dataset[0]['musics'][i]['notes'],dataset[0]['musics'][i]['set']['Instrument']) @@ -876,7 +856,7 @@ def __main__(): from msctspt.transfer import note2RSworld while True: try: - dire = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入坐标:',initialvalue = '16 4 16') + dire = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入坐标:",initialvalue = '16 4 16') if dire == None or dire == '': return; dire = [int(dire.split(' ')[0]), int(dire.split(' ')[1]), int(dire.split(' ')[2])] @@ -884,7 +864,7 @@ def __main__(): tkinter.messagebox.showerror(title="错误❌", message="您输入的格式有误,请重新输入!"); continue break - Outdire = tkinter.filedialog.askdirectory(title='请选择世界文件夹生成的位置', initialdir=r'./'); + Outdire = tkinter.filedialog.askdirectory(title="请选择世界文件夹生成的位置", initialdir=r'./'); if Outdire == None or Outdire == '': return; else: @@ -897,14 +877,14 @@ def __main__(): def world2RyStruct(): - outdir = tkinter.filedialog.askdirectory(title='请选择世界文件夹所在的位置', initialdir=r'./'); + outdir = tkinter.filedialog.askdirectory(title="请选择世界文件夹所在的位置", initialdir=r'./'); if outdir == None or outdir == '': return; else: outdir+='/'; while True: try: - begp = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入区域选择的开始坐标:',initialvalue = '16 4 16') + begp = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入区域选择的开始坐标:",initialvalue = '16 4 16') if begp == None or begp == '': return; begp = [int(begp.split(' ')[0]), int(begp.split(' ')[1]), int(begp.split(' ')[2])] @@ -914,7 +894,7 @@ def __main__(): break while True: try: - endp = tkinter.simpledialog.askstring(title = '坐标信息输入',prompt='请输入区域选择的结束坐标:',initialvalue = '16 4 16') + endp = tkinter.simpledialog.askstring(title = "坐标信息输入",prompt="请输入区域选择的结束坐标:",initialvalue = '16 4 16') if endp == None or endp == '': return; endp = [int(endp.split(' ')[0]), int(endp.split(' ')[1]), int(endp.split(' ')[2])] @@ -923,25 +903,25 @@ def __main__(): continue break isAir = tkinter.messagebox.askyesno("请确认","所选区块导出时是否需要保留空气方块?") - fileName = tkinter.filedialog.asksaveasfilename(title='生成.RyStruct文件', initialdir=r'./', filetypes=[('音·创结构文件', '.RyStruct'), ('全部类型', '*')], defaultextension='*.RyStruct',initialfile='*.RyStruct') + fileName = tkinter.filedialog.asksaveasfilename(title="生成.RyStruct文件", initialdir=r'./', filetypes=[("音·创结构文件", '.RyStruct'), ("全部类型", '*')], defaultextension='*.RyStruct',initialfile='*.RyStruct') if fileName == None or fileName == '': - log("取消") - return; + log('取消') + return from msctspt.transfer import ryStruct rys = ryStruct(outdir) rys.world2Rys(begp,endp,isAir) try: with open(fileName,'w',encoding='utf-8') as f: json.dump(rys.RyStruct,f,sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False) - tkinter.messagebox.showinfo("成功✔",'文件已生成\n'+fileName) + tkinter.messagebox.showinfo("完成!✔","文件已生成\n{}".format(fileName)) except: - tkinter.messagebox.showerror("失败❌",'文件无法生成\n'+fileName+'\n'+str(rys.RyStruct)) + tkinter.messagebox.showerror("失败❌","文件无法生成\n{}\n{}".format(fileName,str(rys.RyStruct))) rys.closeLevel() def world2BDX(): - tkinter.messagebox.showerror("错误",'本功能尚未开发。') + tkinter.messagebox.showerror("错误❌","本功能尚未开发。") @@ -959,9 +939,9 @@ def __main__(): #使用邮件反馈bug def sendBugReport(): from msctspt.bugReporter import report - name = tkinter.simpledialog.askstring(title = '邮件反馈信息输入',prompt='您的称呼') - contact = tkinter.simpledialog.askstring(title = '邮件反馈信息输入',prompt='您的联系方式') - describetion = tkinter.simpledialog.askstring(title = '邮件反馈信息输入',prompt='您对问题的描述') + name = tkinter.simpledialog.askstring(title = "邮件反馈信息输入",prompt="您的称呼") + contact = tkinter.simpledialog.askstring(title = "邮件反馈信息输入",prompt="您的联系方式") + describetion = tkinter.simpledialog.askstring(title = "邮件反馈信息输入",prompt="您对问题的描述") report(name,contact,describetion).emailReport() del name,contact,describetion @@ -979,9 +959,9 @@ def __main__(): global clearLog; clearLog = not clearLog; if clearLog: - tkinter.messagebox.showinfo("完成!✔",'在程序结束后将清除日志及临时文件信息。'); + tkinter.messagebox.showinfo("完成!✔","在程序结束后将清除日志及临时文件信息。") else: - tkinter.messagebox.showinfo("完成!✔",'在程序结束后将不会清除日志及临时文件信息。'); + tkinter.messagebox.showinfo("完成!✔","在程序结束后将不会清除日志及临时文件信息。") @@ -995,7 +975,7 @@ def __main__(): print('增加窗口元素...') global root - root.title(u'音·创 - 金羿 - '+VER[1]+VER[0]) + root.title("音·创 - 金羿 - {}".format(VER[1]+VER[0])) root.geometry('900x900') # 像素 print('完成!') @@ -1027,10 +1007,10 @@ def __main__(): # 刷新音轨部分 def RefreshMusic(Music=0): - LabelEntityName['text'] = '执行实体名: ' + dataset[0]['musics'][Music]['set']['EntityName'] - LabelScoreboardName['text'] = '使用计分板: ' + dataset[0]['musics'][Music]['set']['ScoreboardName'] - LabelInstrument['text'] = '所用的乐器: ' + dataset[0]['musics'][Music]['set']['Instrument'] - LabelFileName['text'] = '当前音轨名: ' + dataset[0]['musics'][Music]['set']['FileName'] + LabelEntityName['text'] = "执行实体名:{}".format(dataset[0]['musics'][Music]['set']['EntityName']) + LabelScoreboardName['text']="使用计分板:{}".format(dataset[0]['musics'][Music]['set']['ScoreboardName']) + LabelInstrument['text'] = "所用的乐器:{}".format(dataset[0]['musics'][Music]['set']['Instrument']) + LabelFileName['text'] = "当前音轨名:{}".format(dataset[0]['musics'][Music]['set']['FileName']) NoteList_var.set(()) # 为列表框设置新值 for i in dataset[0]['musics'][Music]['notes']: ListNoteList.insert(tk.END, str(i)) @@ -1038,10 +1018,10 @@ def __main__(): # 刷新主要部分 def RefreshMain(): - LabelPackName['text'] = '包名: '+str(dataset[0]['mainset']['PackName']) - LabelMusicTitle['text'] = '音乐标题: '+str(dataset[0]['mainset']['MusicTitle']) - LabelIsRepeat['text'] = '是否重复: '+str(dataset[0]['mainset']['IsRepeat']) - LabelPlayerSelect['text'] = '玩家选择器:'+str(dataset[0]['mainset']['PlayerSelect']) + LabelPackName['text'] = "包名:{}".format(str(dataset[0]['mainset']['PackName'])) + LabelMusicTitle['text'] = "音乐标题:{}".format(str(dataset[0]['mainset']['MusicTitle'])) + LabelIsRepeat['text'] = "是否重复:{}".format(str(dataset[0]['mainset']['IsRepeat'])) + LabelPlayerSelect['text'] = "玩家选择器:{}".format(str(dataset[0]['mainset']['PlayerSelect'])) MusicList_var.set(()) # 为列表框设置新值 for i in range(len(dataset[0]['musics'])): ListMusicList.insert(tk.END, i) @@ -1059,7 +1039,7 @@ def __main__(): def changePackName(event): - a = tkinter.simpledialog.askstring(title='修改主设置', prompt='修改包名', initialvalue='Ryoun') + a = tkinter.simpledialog.askstring(title="修改主设置", prompt="修改包名", initialvalue='Ryoun') if a == None: return dataset[0]['mainset']['PackName'] = a @@ -1068,7 +1048,7 @@ def __main__(): def changeMusicTitle(event): - a = tkinter.simpledialog.askstring(title='修改主设置', prompt='修改音乐标题', initialvalue='Noname') + a = tkinter.simpledialog.askstring(title="修改主设置", prompt="修改音乐标题", initialvalue='Noname') if a == None: return dataset[0]['mainset']['MusicTitle'] = a @@ -1081,7 +1061,7 @@ def __main__(): def changePlayerSelect(event): - dataset[0]['mainset']['PlayerSelect'] = tkinter.simpledialog.askstring(title='修改主设置', prompt='修改玩家选择器\n注意!要加上中括号[]', initialvalue='') + dataset[0]['mainset']['PlayerSelect'] = tkinter.simpledialog.askstring(title="修改主设置", prompt="修改玩家选择器\n注意!要加上中括号“[]”", initialvalue='') if dataset[0]['mainset']['PlayerSelect'] == None: dataset[0]['mainset']['PlayerSelect'] = '' RefreshMain() @@ -1089,7 +1069,7 @@ def __main__(): def changeEntityName(event): global NowMusic - a = tkinter.simpledialog.askstring(title='修改节设置', prompt='修改本音轨的执行实体名:', initialvalue='musicSupport') + a = tkinter.simpledialog.askstring(title="修改节设置", prompt="修改本音轨的执行实体名", initialvalue='musicSupport') if a == None: return dataset[0]['musics'][NowMusic]['set']['EntityName'] = a @@ -1098,7 +1078,7 @@ def __main__(): def changeScoreboardName(event): global NowMusic - a = tkinter.simpledialog.askstring(title='修改节设置', prompt='修改本音轨所用的积分板:', initialvalue='musicSupport') + a = tkinter.simpledialog.askstring(title="修改节设置", prompt="修改本音轨所用的积分板", initialvalue='musicSupport') if a == None: return dataset[0]['musics'][NowMusic]['set']['ScoreboardName'] = a @@ -1109,17 +1089,17 @@ def __main__(): from nmcsup.const import Instuments as inst global NowMusic while(True): - instemp = tkinter.simpledialog.askstring(title='修改节设置', prompt='修改本音轨所用乐器:', initialvalue='note.harp') + instemp = tkinter.simpledialog.askstring(title="修改节设置", prompt="修改本音轨所用乐器", initialvalue='note.harp') if not instemp in inst.keys(): - if tkinter.messagebox.askyesno(title='注意', message='您输入的乐器并非游戏内置乐器,是否继续用您输入的字符作为乐器?'): + if tkinter.messagebox.askyesno(title="提示❗", message="您输入的乐器并非游戏内置乐器,是否继续用您输入的字符作为乐器?"): dataset[0]['musics'][NowMusic]['set']['Instrument'] = instemp del instemp break else: - smsg = '游戏内置乐器如下:请输入英文\n' + smsg = "游戏内置乐器如下:请输入英文\n" for i, j in inst.items(): smsg += i+' : '+j+'\n' - tkinter.messagebox.showinfo(title='提示', message=smsg) + tkinter.messagebox.showinfo(title="提示❗", message=smsg) del smsg else: dataset[0]['musics'][NowMusic]['set']['Instrument'] = instemp @@ -1130,7 +1110,7 @@ def __main__(): def changeFileName(event): global NowMusic - a = tkinter.simpledialog.askstring(title='修改节设置', prompt='修改本音轨生成的文件名:', initialvalue='Music') + a = tkinter.simpledialog.askstring(title="修改节设置", prompt="修改本音轨生成的文件名", initialvalue='Music') if a == None: return dataset[0]['musics'][NowMusic]['set']['FileName'] = a @@ -1142,7 +1122,7 @@ def __main__(): def ResetSetting(): global dataset - dataset[0]['mainset'] = {'PackName': "Ryoun",'MusicTitle': 'Noname','IsRepeat': False,'PlayerSelect': ''} + dataset[0]['mainset'] = {'PackName': 'Ryoun','MusicTitle': 'Noname','IsRepeat': False,'PlayerSelect': ''} RefreshMain() @@ -1170,75 +1150,75 @@ def __main__(): # 创建文件菜单 filemenu = tk.Menu(main_menu_bar, tearoff=0) - filemenu.add_command(label=u"打开音·创项目...", command=openProject) - filemenu.add_command(label=u"打开旧项目...", command=openOldProject) - filemenu.add_command(label=u"保存项目", command=SaveProject) - filemenu.add_command(label=u"另存为...", command=SaveAsProject) + filemenu.add_command(label="打开音·创项目...", command=openProject) + filemenu.add_command(label="打开旧项目...", command=openOldProject) + filemenu.add_command(label="保存项目", command=SaveProject) + filemenu.add_command(label="另存为...", command=SaveAsProject) filemenu.add_separator() # 分隔符 - filemenu.add_command(label=u"退出", command=exitapp) + filemenu.add_command(label="退出", command=exitapp) # 将子菜单加入到菜单条中 - main_menu_bar.add_cascade(label=u"文件", menu=filemenu) + main_menu_bar.add_cascade(label="文件", menu=filemenu) # 创建编辑菜单 editmenu = tk.Menu(main_menu_bar, tearoff=0) - editmenu.add_command(label=u"从钢琴MP3导入音轨", command=FromMP3) - editmenu.add_command(label=u"从midi导入音轨", command=FromMidi) - editmenu.add_command(label=u"从文本文件导入音轨", command=FromForm) - editmenu.add_command(label=u"输入音符至音轨", command=FromText) + editmenu.add_command(label="从钢琴MP3导入音轨", command=FromMP3) + editmenu.add_command(label="从midi导入音轨", command=FromMidi) + editmenu.add_command(label="从文本文件导入音轨", command=FromForm) + editmenu.add_command(label="输入音符至音轨", command=FromText) # 将子菜单加入到菜单条中 - main_menu_bar.add_cascade(label=u"编辑", menu=editmenu) + main_menu_bar.add_cascade(label="编辑", menu=editmenu) #创建函数菜单 funcmenu = tk.Menu(main_menu_bar, tearoff=0) - funcmenu.add_command(label=u"生成文件至...", command=MakeCMD) - funcmenu.add_command(label=u"生成函数包至...", command=MakeCMDdir) - funcmenu.add_command(label=u"生成附加包文件至...", command=MakePackFile) + funcmenu.add_command(label="生成文件至...", command=MakeCMD) + funcmenu.add_command(label="生成函数包至...", command=MakeCMDdir) + funcmenu.add_command(label="生成附加包文件至...", command=MakePackFile) # 将子菜单加入到菜单条中 - main_menu_bar.add_cascade(label=u"函数(包)", menu=funcmenu) + main_menu_bar.add_cascade(label="函数(包)", menu=funcmenu) #创建世界菜单 worldmenu = tk.Menu(main_menu_bar, tearoff=0); - worldmenu.add_command(label=u"将音乐以方块存储生成地图", command=ToBlockWorldEpt); - worldmenu.add_command(label=u"将音乐以方块存储载入地图…", command=ToBlockWorld); + worldmenu.add_command(label="将音乐以方块存储生成地图", command=ToBlockWorldEpt); + worldmenu.add_command(label="将音乐以方块存储载入地图…", command=ToBlockWorld); worldmenu.add_separator() - worldmenu.add_command(label=u"将音乐以指令存储生成地图", command=ToCmdWorldEpt); - worldmenu.add_command(label=u"将音乐以指令存储载入地图…", command=ToCmdWorld); + worldmenu.add_command(label="将音乐以指令存储生成地图", command=ToCmdWorldEpt); + worldmenu.add_command(label="将音乐以指令存储载入地图…", command=ToCmdWorld); worldmenu.add_separator() - worldmenu.add_command(label=u"将音乐以音符盒存储生成地图", command=toRSworldEPT); - worldmenu.add_command(label=u"将音乐以音符盒存储载入地图…", command=toRSworld); + worldmenu.add_command(label="将音乐以音符盒存储生成地图", command=toRSworldEPT); + worldmenu.add_command(label="将音乐以音符盒存储载入地图…", command=toRSworld); # 将子菜单加入到菜单条中 - main_menu_bar.add_cascade(label=u"世界", menu=worldmenu); + main_menu_bar.add_cascade(label="世界", menu=worldmenu); # 创建其他功能菜单 otherMenu = tk.Menu(main_menu_bar, tearoff=0) - otherMenu.add_command(label=u"生成符合当前音乐的函数播放器…", command=MakeFuncPlayer) + otherMenu.add_command(label="生成符合当前音乐的函数播放器…", command=MakeFuncPlayer) otherMenu.add_separator(); - otherMenu.add_command(label=u"将选中音轨以指令存储生成.bdx文件…", command=toScbBDXfile) - otherMenu.add_command(label=u"由地图导出至.bdx文件…", command=world2BDX) - otherMenu.add_command(label=u"由地图导出至.RyStruct文件…", command=world2RyStruct) + otherMenu.add_command(label="将选中音轨以指令存储生成.bdx文件…", command=toScbBDXfile) + otherMenu.add_command(label="由地图导出至.bdx文件…", command=world2BDX) + otherMenu.add_command(label="由地图导出至.RyStruct文件…", command=world2RyStruct) otherMenu.add_separator(); - otherMenu.add_command(label=u"将函数载入世界…", command=func2World); - otherMenu.add_command(label=u"将大函数分割并建立执行链…", command=bigFunc2World); + otherMenu.add_command(label="将函数载入世界…", command=func2World); + otherMenu.add_command(label="将大函数分割并建立执行链…", command=bigFunc2World); - main_menu_bar.add_cascade(label=u"辅助功能", menu=otherMenu); + main_menu_bar.add_cascade(label="辅助功能", menu=otherMenu); # 创建实验功能菜单 trymenu = tk.Menu(main_menu_bar, tearoff=0) - trymenu.add_command(label=u"展示生成结果", command=ShowCMD) - trymenu.add_command(label=u"建立位于localhost:8080上的websocket服务器播放选中音轨", command=wsPlay) + trymenu.add_command(label="展示生成结果", command=ShowCMD) + trymenu.add_command(label="建立位于localhost:8080上的websocket服务器播放选中音轨", command=wsPlay) # 将子菜单加入到菜单条中 - main_menu_bar.add_cascade(label=u"实验功能", menu=trymenu) + main_menu_bar.add_cascade(label="实验功能", menu=trymenu) @@ -1248,16 +1228,16 @@ def __main__(): # 创建帮助菜单 helpmenu = tk.Menu(main_menu_bar, tearoff=0) - helpmenu.add_command(label=u"清除临时文件", command=ClearLog) - helpmenu.add_command(label=u"清除存在文件", command=resetver) + helpmenu.add_command(label="清除临时文件", command=ClearLog) + helpmenu.add_command(label="清除存在文件", command=resetver) helpmenu.add_separator() # 分隔符 - helpmenu.add_command(label=u"帮助", command=apphelp) - helpmenu.add_command(label=u"关于", command=appabout) - helpmenu.add_command(label=u"发送错误日志反馈",command=sendBugReport) + helpmenu.add_command(label="帮助", command=apphelp) + helpmenu.add_command(label="关于", command=appabout) + helpmenu.add_command(label="发送错误日志反馈",command=sendBugReport) # 将子菜单加入到菜单条中 - main_menu_bar.add_cascade(label=u"帮助与疑问", menu=helpmenu) + main_menu_bar.add_cascade(label="帮助与疑问", menu=helpmenu) # 窗口内容 @@ -1270,24 +1250,24 @@ def __main__(): #左边的框(音乐总设置) UpLeftFrame = tk.Frame(UpFrame, bg='white') # 大标题 - tk.Label(UpLeftFrame, text='音乐总设置(项目设置)', font=('', 20)).pack() + tk.Label(UpLeftFrame, text="音乐总设置(项目设置)", font=('', 20)).pack() # 按钮式文本 - LabelPackName = tk.Label(UpLeftFrame, bg='white', text='地图/函数包名: ', font=('', 15)) - LabelMusicTitle = tk.Label(UpLeftFrame, bg='white',text='音乐标题: ', font=('', 15)) - LabelIsRepeat = tk.Label(UpLeftFrame, bg='white', text='是否重复: ', font=('', 15)) - LabelPlayerSelect = tk.Label(UpLeftFrame, bg='white', text='玩家选择器:', font=('', 15)) + LabelPackName = tk.Label(UpLeftFrame, bg='white', text="地图/函数包名:", font=('', 15)) + LabelMusicTitle = tk.Label(UpLeftFrame, bg='white',text="音乐标题:", font=('', 15)) + LabelIsRepeat = tk.Label(UpLeftFrame, bg='white', text="是否重复:", font=('', 15)) + LabelPlayerSelect = tk.Label(UpLeftFrame, bg='white', text="玩家选择器:", font=('', 15)) # 绑定按钮 - LabelPackName.bind("", changePackName) - LabelMusicTitle.bind("", changeMusicTitle) - LabelIsRepeat.bind("", changeIsRepeat) - LabelPlayerSelect.bind("", changePlayerSelect) + LabelPackName.bind('', changePackName) + LabelMusicTitle.bind('', changeMusicTitle) + LabelIsRepeat.bind('', changeIsRepeat) + LabelPlayerSelect.bind('', changePlayerSelect) # 装入容器 LabelPackName.pack() LabelMusicTitle.pack() LabelIsRepeat.pack() LabelPlayerSelect.pack() # 按钮:重置项目设置 - tk.Button(UpLeftFrame, text='重置项目设置', command=ResetSetting).pack() + tk.Button(UpLeftFrame, text="重置项目设置", command=ResetSetting).pack() #装入窗口 UpLeftFrame.pack(side='left') @@ -1311,24 +1291,24 @@ def __main__(): #右边的框容器 UpRightFrame = tk.Frame(UpFrame, bg='white') # 大标题 - tk.Label(UpRightFrame, text='当前音轨设置(段落设置)', font=('', 20)).pack() + tk.Label(UpRightFrame, text="当前音轨设置(段落设置)", font=('', 20)).pack() # 按钮式文本 - LabelEntityName = tk.Label(UpRightFrame, bg='white',text='执行实体名: ', font=('', 15)) - LabelScoreboardName = tk.Label(UpRightFrame, bg='white', text='使用计分板: ', font=('', 15)) - LabelInstrument = tk.Label(UpRightFrame, bg='white',text='所用的乐器: ', font=('', 15)) - LabelFileName = tk.Label(UpRightFrame, bg='white',text='当前音轨名: ', font=('', 15)) + LabelEntityName = tk.Label(UpRightFrame, bg='white',text="执行实体名:", font=('', 15)) + LabelScoreboardName = tk.Label(UpRightFrame, bg='white', text="使用计分板:", font=('', 15)) + LabelInstrument = tk.Label(UpRightFrame, bg='white',text="所用的乐器:", font=('', 15)) + LabelFileName = tk.Label(UpRightFrame, bg='white',text="当前音轨名:", font=('', 15)) # 绑定按钮 - LabelEntityName.bind("", changeEntityName) - LabelScoreboardName.bind("", changeScoreboardName) - LabelInstrument.bind("", changeInstrument) - LabelFileName.bind("", changeFileName) + LabelEntityName.bind('', changeEntityName) + LabelScoreboardName.bind('', changeScoreboardName) + LabelInstrument.bind('', changeInstrument) + LabelFileName.bind('', changeFileName) # 装入框容器 LabelEntityName.pack() LabelScoreboardName.pack() LabelInstrument.pack() LabelFileName.pack() # 按钮:删除选中音轨 - tk.Button(UpRightFrame, text='删除选中音轨', command=DelNowMusic).pack() + tk.Button(UpRightFrame, text="删除选中音轨", command=DelNowMusic).pack() #装入窗口 UpRightFrame.pack(side='left') @@ -1344,7 +1324,7 @@ def __main__(): texts = open('./resources/mySayings.txt','r',encoding='utf-8').readlines() - tk.Label(DownFrame,text=texts[random.randint(0,len(texts)-1)].replace('\n',''),fg='white',bg='black',font=('DengXian Light',20)).pack(fill='x') + tk.Label(DownFrame,text=texts[random.randint(0,len(texts)-1)].replace('\n','').replace('\\n','\n'),fg='white',bg='black',font=('DengXian Light',20)).pack(fill='x') del texts @@ -1376,19 +1356,19 @@ def __main__(): print('完成!') - log("启动root.mainloop(窗口)") + log('启动root.mainloop(窗口)') if len(sys.argv) != 1: - log("初始化打开音·创项目"+sys.argv[1]) + log('初始化打开音·创项目'+sys.argv[1]) global is_save is_save = True try: with open(sys.argv[1], 'r', encoding='UTF-8') as c: dataset[0] = json.load(c) except: - print('无法打开文件:'+sys.argv[1]+",请查看您是否输入正确") - log("无法打开"+sys.argv[1]) + print("无法打开文件:{},请查看您是否输入正确".format(sys.argv[1])) + log('无法打开'+sys.argv[1]) return global is_new_file global ProjectName @@ -1401,7 +1381,7 @@ def __main__(): # 进入窗口消息循环 root.mainloop() - log("退出") + log('退出') del filemenu, editmenu, helpmenu, otherMenu exitapp() diff --git a/resources/MSCT Dev Log.txt b/resources/MSCT Dev Log.txt index 2106983..2ef2e3c 100644 --- a/resources/MSCT Dev Log.txt +++ b/resources/MSCT Dev Log.txt @@ -31,6 +31,13 @@ Copyright © W-YI 2022 新更新日志 + Delta 0.0.1 +2021 1 3 +1.新增对翻译字符串的支持 +2.把所有需要翻译的字符串用双引号字符串表示,其余全是单引号字符串 +2.2.累死我了,我错了我错了,饶了我吧,以后一定遵守代码规范 + + Delta 0.0.0 2022 1 2 1.重新采用Tk作为窗口库 diff --git a/resources/mySayings.txt b/resources/mySayings.txt index a76f2b3..a36f397 100644 --- a/resources/mySayings.txt +++ b/resources/mySayings.txt @@ -8,4 +8,12 @@ 那个曾与我相伴的人 依稀在我的心头留恋 我爱你 我 爱 你 你是我灵魂中绽放出最艳丽的花朵 -心之所向 意之所属 \ No newline at end of file +心之所向 意之所属 +一个蛋从外面被敲开,注定被吃掉\n但从里面啄开,没准是只鹰 ——长津湖 +音·创 +辉煌的、璀璨的、无边无际、铺天盖地的晚霞\n洒下斑驳的金光,染红了整片山河 +《赫兰圣殿》 +风,摇曳着,轻抚着他的脸颊\n半壁残阳正留恋着人世最后一抹温暖 +清晨的阳光将吹散人间的雾霭 照亮每一寸土壤 +远方的山川 总会踏着白雾前来 +梦中的世界 总被现实相依存 \ No newline at end of file