搜索
查看: 583|回复: 3
打印 上一主题 下一主题

按键响应事件里import py和或者启动线程里import py失败,怎么解决?

[复制链接]

2

主题

6

帖子

34

积分

新手入门

Rank: 1

积分
34
跳转到指定楼层
楼主
发表于 2018-6-30 07:30:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bigsize 于 2018-6-30 07:40 编辑

我想在按钮被点击后,对了,我是web blink页面的winform加入按钮控件,点击按钮后mb.doJS获取页面里的网址,然后再调用external里的函数,函数里引入python或者开启线调用python里的requests下载网页,但是无法工作,无论是直接调用还是启动线程,尝试两天了,实在搞不定,急需帮助和指导,非常感谢。

我发现引入 console, win可以工作,就是无法引入python
回复

使用道具 举报

4

主题

63

帖子

478

积分

二级会员

Rank: 3Rank: 3

积分
478
沙发
发表于 2018-6-30 08:06:11 | 只看该作者
代码,代码,代码,强调了那么多次的事情,问问题就发可以重现问题的全部代码,你这么厉害,能把过程说清楚,我们没有耐心给你写代码!!!
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
板凳
发表于 2018-6-30 12:11:33 | 只看该作者
1、python本身并不支持多线程
2、你的问题在范例里有答案,提问以前先看文档范例,避免重复提问。
3、发贴页面已经有公告规则,提问附上可重现问题的代码,“口述代码”你自己也累,看的人也累。
回复

使用道具 举报

2

主题

6

帖子

34

积分

新手入门

Rank: 1

积分
34
地板
 楼主| 发表于 2018-6-30 20:17:33 | 只看该作者
本帖最后由 bigsize 于 2018-6-30 20:25 编辑
Jacen.He 发表于 2018-6-30 12:11
1、python本身并不支持多线程
2、你的问题在范例里有答案,提问以前先看文档范例,避免重复提问。
3、发 ...


谢谢回复,是不是按钮响应事件是个线程,无法启动其他线程呢。代码,如下,希望能帮我看看。

  1. import win.ui;
  2. /*DSG{{*/
  3. mainForm = win.form(text="siteDownload";right=1259;bottom=969;border="none";mode="popup")
  4. mainForm.add(
  5. downloadButton={cls="button";text="下载列表";left=516;top=16;right=587;bottom=44;z=2};
  6. hint={cls="static";left=37;top=19;right=318;bottom=42;notify=1;transparent=1;z=5};
  7. listbox={cls="listbox";left=33;top=55;right=988;bottom=123;edge=1;items={};vscroll=1;z=3};
  8. urlButton={cls="button";text="提取链接列表";left=387;top=16;right=472;bottom=42;z=1};
  9. webHost={cls="edit";text="edit";left=2;top=128;right=1265;bottom=996;edge=1;multiline=1;z=4}
  10. )
  11. /*}}*/

  12. import web.blink.portable;//生成独立EXE
  13. import web.blink.jsFunction;//可选预定义全局JS函数
  14. import web.blink.form;//导入miniblink组件
  15. var mb = web.blink.form(mainForm.webHost);

  16. import wsock.tcp.simpleHttpServer;
  17. //wsock.tcp.simpleHttpServer.startUrl("/html/main.aardio")
  18. mainForm.hint.text = "页面加载中,请稍候";
  19. mb.go( "https://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000");

  20. mb.onDocumentReady = function(isMainFrame,hFrame){
  21.         mainForm.hint.text = "页面加载完毕,可以进一步处理";
  22. }

  23. //导出网页js脚本可以直接调用的external对象
  24. mb.external = {
  25.     hitCaption = function(){
  26.         mainForm.hitCaption();
  27.     };
  28.     hitmax = function(){
  29.             return mainForm.hitmax()
  30.     };
  31.     hitmin = function(){
  32.             mainForm.hitmin()
  33.     };
  34.     close = function(){
  35.         mainForm.close();
  36.     };
  37.    

  38.    
  39.     updateItem = function(str,link){
  40.       
  41.        whole = str+ "**https://www.liaoxuefeng.com" +link;
  42.        mainForm.listbox.add(whole,1);
  43.             
  44.     };
  45.    
  46.     aardioCall = function(str){
  47.         mainForm.msgbox(str);
  48.     };
  49. }

  50. //打开链接时触发该事件
  51. mb.onNavigation = function(url,navigationType){
  52.         if( navigationType == 0/*_WKE_NAVIGATION_TYPE_LINKCLICK*/ ){
  53.        
  54.         }
  55.         return true;
  56. }


  57. //可以使用CSS选择器获取HTML节点对象




  58. mainForm.urlButton.oncommand = function(id,event){
  59.    mb.doScript(`
  60.    
  61.   var links = $('#x-wiki-index a');
  62.   for(var i=0;i<links.length;i++){

  63.        var item = $(links[ i ]).text();
  64.        var link = $(links[ i ]).attr("href");
  65.        link = link.replace("20%","");
  66.        external.updateItem(item,link);
  67.       // external.downloadItem(item,link);
  68.       
  69.      
  70.       
  71.   }


  72. `);
  73. }



  74. mainForm.downloadButton.oncommand = function(id,event){

  75.    import console;
  76.    import py;
  77.    requests = py.import("requests");
  78.    items = mainForm.listbox.items;
  79.    
  80.    var i = 0;
  81.    for(key,val in items){
  82.    
  83.      if(i<3){
  84.       
  85.         var urls = string.split(val,"<**>");
  86.         var url = urls[2];
  87.       
  88.         console.log("in button event:"+url);
  89.         //在button事件里调用requests
  90.         res = requests.get(url);
  91.         console.log(res.text);  
  92.         
  93.         thread.invoke(
  94.                 function(url){
  95.                         import  console;
  96.                         console.log("in thread:"+url);
  97.                         import py;
  98.                         //在线程里调用requests
  99.                         requests = py.import("requests");
  100.                     res = requests.get(url);
  101.                 console.log(res.text);
  102.                 }
  103.                 ,url
  104.         )
  105.       
  106.         i++;
  107.      }
  108.    
  109.    }

  110. }




  111. //添加可拖动边框
  112. import win.ui.resizeBorder;
  113. win.ui.resizeBorder(mainForm);

  114. //添加阴影
  115. import win.ui.shadow;
  116. win.ui.shadow(mainForm);

  117. //限定最大化范围

  118. mainForm.webHost.oncommand = function(id,event){
  119.        
  120. }

  121. mainForm.hint.oncommand = function(id,event){
  122.        
  123. }

  124. import win.ui.minmax;
  125. win.ui.minmax(mainForm);

  126. mainForm.show();
  127. win.loopMessage();

  128. mb.wait(); //等待页面完全打开
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-24 06:23 , Processed in 0.062500 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表