Python3结合Sciter编写桌面程序

发布时间:2019-08-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Python3结合Sciter编写桌面程序脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

本文写于2017.8.21,不保证之后版本的兼容性

第一节 基础介绍及最简单测试

先上流程图

在线流程图
599a376fe4b06df7265d7af2.png

废话?

最近在学Python3,啃书啃不下去,咱是那种用到啥学啥的类型,刚好想做一个扒图的程序,权当练习。
选用ScITer的理由...因为咱是前端,先不说sciter有多好,至少目前是满足的。

需求:

  • 界面

  • 科学上网

对一个扒图操作而言,单纯的Py就够了,网上栗子多得是,就不在废话
但对用惯Windows的咱来说,我想要一个界面,并且我并不想把图全下载下来,我希望能有个预览,发现满意的再下载...这,只能搞成桌面程序了吧

一点点来...

首先从界面入手吧

HTML写的,没啥难点,略过...

一个重要的点,Sciter写的界面如何与Python程序交互?

假如有一个按钮:

<button class="BTn">Button</button>

Tiscript(sciter专有脚本语言,类似Js):

$(.btn).on("click",function(){
    view.clickBtn("A","B");  //view Sciter内置的对象,所有tis都可调用
})

Python:

def clickBtn(self, p1, p2 = None):
    pass

那么,Python如何调用Tis的函数呢?

Tiscript:

function myBtn(){
    return;
}

Python:

call_function()PySciter的方法

def clickBtn(self, p1, p2 = None):
    self.call_function('myBtn')  
    pass

以上就完成了Python与Sciter的通信。

拓展

关于传参问题

view.clickBtn("A");
...
def clickBtn(self, p1, p2 = None ):
      PRint( p1, type(p1) )

输出 : "A" <class 'sciter.value.value'>
我们的本意是传递字符串A,但得到的却是<class 'sciter.value.value'>类型的 "A" (此处"是值的一部分)
解决方法:
str(p1).strip('"')

如何传递Json?

view.clickBtn({"a":"A"});
...
def clickBtn(self, p1, p2 = None ):
      print( p1, type(p1) )

输出 : {"a":"A"} <class 'sciter.value.value'>
看着没问题...但

print(p1['a'])

会报 TypeError 的错误

解决方法:

p = json.loads( str(p1) )
print(p['a'])

call_function() 又是如何呢?

self.call_function('myBtn','A')
...
function myBtn(p1){
   stdout.println(p1);
   return;
}

输出 : A
可以看出值被准确的传递了, Json呢?

self.call_function('myBtn',{'a':'A'})
...
function myBtn(p1){
   stdout.println(p1["a"]);
   return;
}

输出 : A
看来也是没有问题的。

注意: Sciter中不识别单引号, "'"作为字符串没问题 , 但不可用于取值。即
p['a'] 是错误的!!
p['a'] 是错误的!!
p['a'] 是错误的!!

Ok,说完了以上的基础知识,咱来开始正式的敲代码吧~

先来一个最简单的页面:

<html window-frame="transparent">
<head>
<title>Demo</title>
<style type="text/css" src="scs/css.scs"></style>
<script type="text/tiscript">
    function clickCallBack(p1){
        $(footer>section).text = p1;  //位于statusbar.html
        return;
    }
</script>
</head>
<body>
<widget#widget>
<include src="titlebar.html" />
<section#body>
    <button class="click-me">点我</button>
</section>
<include src="statusbar.html" />
</widget>
</body>

</html>
# 导入sciter支持,必须安装pysciter
import sciter
import ctypes
import json
import time

# 设置dpi, 止程序在高分屏下发虚
ctypes.windll.user32.SetProceSSDPIAware(2)

class Frame(sciter.Window):
    def __init__(self):
        '''
            ismain=False, ispopup=False, ischild=False, resizeable=True,
            parent=None, uni_theme=False, debug=True,
            pos=None,  pos=(x, y)
            size=None
        '''
        super().__init__(ismain=True, debug=True)
        self.set_dispatch_options(enable=True, require_attribute=False)

    def clickMe(self):
        # 此处用sleep来模拟需要耗时的操作
        time.sleep(5)
        self.call_function('clickCallBack','你已经点到我了!')

if __name__ == '__main__':
    frame = Frame()
    frame.load_file("Gui/main.html")
    frame.run_app()

运行效果:
sciter.gif

源码

感觉还不错,不是吗?

Python3结合Sciter编写桌面程序第二节

Python3结合Sciter编写桌面程序第三节

脚本宝典总结

以上是脚本宝典为你收集整理的Python3结合Sciter编写桌面程序全部内容,希望文章能够帮你解决Python3结合Sciter编写桌面程序所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。