博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python3结合Sciter编写桌面程序
阅读量:5915 次
发布时间:2019-06-19

本文共 2350 字,大约阅读时间需要 7 分钟。

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

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

先上流程图

599a376fe4b06df7265d7af2.png

废话?

最近在学Python3,啃书啃不下去,咱是那种用到啥学啥的类型,刚好想做一个扒图的程序,权当练习。

选用Sciter的理由...因为咱是前端,先不说sciter有多好,至少目前是满足的。

需求:

  • 界面

    • 多站点

    • 预览图片

    • 下载原图

  • 科学上网

对一个扒图操作而言,单纯的Py就够了,网上栗子多得是,就不在废话

但对用惯Windows的咱来说,我想要一个界面,并且我并不想把图全下载下来,我希望能有个预览,发现满意的再下载...这,只能搞成桌面程序了吧

一点点来...

首先从界面入手吧

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

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

假如有一个按钮:

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()是的方法

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,说完了以上的基础知识,咱来开始正式的敲代码吧~

先来一个最简单的页面:

Demo
# 导入sciter支持,必须安装pysciterimport sciterimport ctypesimport jsonimport 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

感觉还不错,不是吗?

转载地址:http://pswvx.baihongyu.com/

你可能感兴趣的文章
mysql数据库sleep进程过多的处理办法
查看>>
第二次作业
查看>>
opencv 实现图像像素点反转
查看>>
Access denied for user 'root'@'localhost' (using p
查看>>
linux中grep命令
查看>>
H3C模拟器 DHCP Snooping 、中继 实例配置
查看>>
sed工具的使用
查看>>
数据仓库工程师、大数据开发工程师、BI工程师、ETL工程师之间有什么区别?...
查看>>
JVM初识-java类加载器
查看>>
对比各类分布式锁缺陷,抓住Redis分布式锁实现命门
查看>>
设置typeid后织梦currentstyle 不起作用的修复方法
查看>>
AndroidManifest.xml解析
查看>>
linux下磁盘分区详解
查看>>
利用iptables屏蔽IP段
查看>>
Oracle动态采样详解
查看>>
APUE读书笔记-03文件输入输出(4)
查看>>
linux系统中top命令输出详解
查看>>
cURL: Learning..
查看>>
540. Single Element in a Sorted Array(有序数组的 Single Element)(leetcode)
查看>>
Codeforces Round #219 (Div. 1) A. Counting Kangaroos is Fun 【二分】
查看>>