aardio:用 WebView 模仿 mdict 界面
aardio:用 WebView 模仿 mdict 界面
main.aardio 见下面
import win.ui;
/*DSG{{*/
mainForm = win.form(text="aardio2";right=889;bottom=467)
mainForm.add(
button={cls="button";text="go";left=335;top=22;right=399;bottom=41;z=2};
button2={cls="button";text="prefix";left=426;top=21;right=497;bottom=40;z=4};
button3={cls="button";text="mp3play";left=533;top=19;right=592;bottom=39;z=5};
button4={cls="button";text="TTS读音";left=621;top=17;right=681;bottom=39;z=7};
custom={cls="custom";text="WebView2";left=165;top=55;right=889;bottom=469;z=3};
edit={cls="edit";left=17;top=19;right=317;bottom=43;edge=1;z=1};
listbox={cls="listbox";left=7;top=56;right=161;bottom=463;edge=1;items={};vscroll=1;z=6}
)
/*}}*/import web.view;
var wb = web.view(mainForm.custom);import web.json;
import console;import io;
import sys;
import fsys.media;
import web.rest.jsonClient;
//创建 HTTP 客户端
var http = web.rest.jsonClient();var basepath = "D:\mdict\data";import com.sapi.voice; //导入语音组件
var voice = com.sapi.voice(); //创建语音对象
//导出本地函数给网页 JavaScript
wb.external = {speak = function(txt){if (string.len(txt) >0) {voice.speakAsync(txt,1);//异步非阻塞朗读voice.waitOne(); //等待朗读结束} }
}var js = /* var select = window.getSelection();var txt = select.toString(); aardio.speak(txt);
*/
//console.print(js);var baseurl = "http://localhost:8888/";
//响应按钮事件
mainForm.button.oncommand = function(id,event){mainForm.button.disabled = true;var txt = mainForm.edit.text ;var str = string.trim(txt);if (string.startWith(str, "http://") or string.startWith(str, "https://")){wb.go(str);} elseif (string.startWith(str,"D:") or string.endWith(str,".htm")){if (io.exist(str)){wb.go(str);} else {mainForm.msgbox(str+" not found.");}} else {url = baseurl + "trans?txt=" + str;wb.go(url);win.delay(1000);//wb.doScript(js);}mainForm.button.disabled = false;
}// prefix 前缀匹配
mainForm.button2.oncommand = function(id,event){mainForm.button2.disabled = true;var txt = mainForm.edit.text;var str = string.trim(txt);if (string.startWith(str, "http://") or string.startWith(str, "https://")){wb.go(str);} else { //url = baseurl + "prefix?txt=" + str;//发送 GET 请求var data = http.get(baseurl++"prefix",{ txt=str });//console.dumpJson(data);if (data){mainForm.listbox.clear(); for( k,v in data){mainForm.listbox.add(v);}mainForm.listbox.selIndex = 1;} else {if (http.statusCode ){//服务端返回错误信息console.log( http.lastResponse(), "http错误代码:"++ http.statusCode )} else {//本地内部错误mainForm.msgbox("data is null");}}}mainForm.button2.disabled = false;
}// 播放本地 .mp3
mainForm.button3.oncommand = function(id,event){mainForm.button3.disabled = true;var path = fsys.dlg.open("*.mp3|*.MP3");if (io.exist(path)){mainForm.edit.text = path;if (string.endWith(path, ".mp3")){mp3 = fsys.media(path);if (mp3) mp3.play();}}mainForm.button3.disabled = false;
}// TTS 读单词
mainForm.button4.oncommand = function(id,event){mainForm.button4.disabled = true;var str = mainForm.edit.text;if (string.startWith(str, "C:") or string.startWith(str, "D:")){if (mp3) mp3.stop();}wb.doScript(js);mainForm.button4.disabled = false;
}mainForm.listbox.oncommand = function(id,event){if( event == 0x1/*_LBN_SELCHANGE*/ ){str = mainForm.listbox.selText;url = baseurl + "trans?txt=" + str;wb.go(url);}
}//响应回车键弹起的消息
mainForm.edit.wndproc = function(hwnd,message,wParam,lParam){if(message == 0x101/*_WM_KEYUP*/ && wParam == 0xD/*_VK_ENTER*/){var txt = mainForm.edit.text ;var str = string.trim(txt);if (string.startWith(str, "http://") or string.startWith(str,"https://")){wb.go(str);} elseif (string.startWith(str,"D:") or string.endWith(str,".htm")){if (io.exist(str)){wb.go(str);} else {mainForm.msgbox(str+" not found.");}} else {url = baseurl + "trans?txt=" + str;wb.go(url);//win.delay(1000);//wb.doScript(js);}}//无返回值则继续调用默认回调函数
}mainForm.show();
return win.loopMessage();
对这个模仿程序的评价:"有点像"跟"是一样",很多时候有遥远的距离。这个比 tkwebview2 好用
web 服务程序参见:python:mdict + bottle = web 查询英汉词典
编写 index1.html 如下
查询英汉词典

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
