脚本宝典收集整理的这篇文章主要介绍了Python3结合Sciter编写桌面程序,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
本文写于2017.8.21,不保证之后版本的兼容性
第一节 基础介绍及最简单测试
先上流程图
废话?
最近在学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,说完了以上的基础知识,咱来开始正式的敲代码吧~
先来一个最简单的页面: