太赞了!别再说 不能用Python开发美观的GUI程序了!
太赞了!别再说 不能用Python开发美观的GUI程序了!
太赞了!别再说 不能用Python开发美观的GUI程序了!,测车速的软件,fan墙软件,位置穿越软件Tkinter Designer需要学习Figma这款设计软件如何使用,其美化GUI的原理就是用图片去填充,从而让Tkinter有比较美观的样式,抱歉,我暂时还不想学Figma。
而另外一个方案:TTk Bootstrap其实是更大的坑,如果你只是开发单窗口GUI软件,TTkBootstrap挺好的,但当你有开启一个窗口后,关闭并开启另外一个新窗口的需求时,TTKBoostrap就是一个大坑,新的窗口会丢失掉相应的样式。
我希望Python生态中有类似Electron的库,让我们可以利用HTML、CSS、JS来构建前端页面,而后端的逻辑使用Python来实现,这样就可以轻松构建出美观的GUI了。
有我微信好友的朋友应该知道,上两周我帮助大家将视频一键同步到6个不同的媒体平台,这个软件便使用PyWebView框架开发,软件界面如下:
PyWebView可以让你通过HTML、CSS、JS来构建GUI的前端页面,使用Python来实现软件中的业务逻辑,再配合使用Pyinstaller实现软件打包,便可以构建一个美观的GUI应用了。
遗憾的是PyWebView资料比较少,Github的star数也不多,我实际操作下来,有些Windows平台无法打开,因精力有限,也没有去深究为何无法打开。
本文便简单介绍PyWebView的使用方法,相比于官方文档,会突出其中遇到的坑和相应的解决方案,也算是视频同步助手这个项目的技术复盘吧(嗯,变现阶段失败了,所以)。
光读PyWebView的文档,是比较难起步的,比较好的方式是去PyWebView的github中将源码拉下来,其中有example目录,提供了一下例子项目,其中要搞懂的核心逻辑是,前端JS写的逻辑,怎么去与Python互通。
在实例化webview时,将定义好的Api类实例作为js_api的参数传入:
因为我们项目在启动时,开启了debug模式,所以可以按F12打开浏览器的DevTools,在控制台中,可以轻松打印出window.pywebview中各种属性,其中的api属性包含了Python中Api类提供的所有方法。
JS api对于一些比较复杂的需求不太好用,此时可以使用HTTP服务的形式,具体而言,利用Flask开启一个web服务,前端的操作通过HTTP请求来调用该Web服务。
前端JS通过Ajax的形式,请求Flask提供的接口,从而让后端执行相关的逻辑,如果没有使用Vue、React等框架时,我个人便习惯使用Jquery提供的ajax方法,并在该方法基础上再封装多一层。
# 判断前端传递token是否与webview.token一致,从而校验请求是否合法
在开发视频同步助手时,为了方便,没有使用Vue+PyWebView的形式,即我无法使用类似vue-router的东西来实现页面变化的效果,那要怎么弄呢?
为了实现页面的变化,我将侧边栏这些都写到base.html中,然后通过Flask模板继承的能力避免每个页面中都弄个侧边栏。
当我们要访问不同页面时,发现PyWebView不允许你通过render_template方法获得新页面,PyWebView要实现页面更新只有两种方式,一是使用load_url方法,提供一个url,webview会去加载新的页面,另一种是使用load_html方法,该方法会加载html文件。
遗憾的是,load_html方法加载html时,不会执行html中引入的JS,所以我们只能通过load_url方法去做。
回顾一下PyWebView HTTP服务的使用,我们利用Flask构建了web实例,但Web实例启动后监听的端口这些是由PyWebView随机分配的,我们无法获得,而load_url方法需要完整的url才能获取。
为了解决这个问题,只能在PyWebView刚启动时,将url记录起来,然后再利用记录的url拼接出完整的URL,实现页面的切换。
PyWebView启动后,如果开启了HTTP服务,会默认访问根路径,我们在这里记录一下url:
通过这种方式,利用了PyWebView的load_url方法,成功加载新页面,实现页面的切换,页面中的JS也可以正常执行。
用户需要添加自己的视频到无感同步助手中,会发现,视频元素无法显示,其原因在于,视频可能在用户系统的任意位置,当前Flask构建的web服务因为安全沙箱的原因,无法读取系统中任意位置的元素并返回。
我们是否可以为Flask添加多个static,从而实现让Flask可以访问系统中任意元素的效果呢?嗯,可以的,利用Flask提供的send_from_directory方法。
无感同步助手的业务逻辑中,有开启新Tab页面的需求,网上常见的解决方法为:
正常而言,这会开启一个新的Tab,但Chrome为了避免网站恶意开启新的Tab,默认是不允许纯JS开启新Tab的操作的。
怎么解决?翻了大半天Chrome的文档,才知道维护window.open无效以及解决方法。
PyWebView会使用系统自带的浏览器内核来给你的GUI程序提供前端展示,而Electron是自己打包进一个Chromium,所以PyWebView打包会小一点,但稳定性上,个人体验下来,比Electron差上一些。
此外,Pyinstaller打包也是一个大坑,后续有空,再将Pyinstaller的各种实践技巧补上。
入门:最全的零基础学Python的问题零基础学了8个月的Python实战项目学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》38年NBA最佳球员分析从万众期待到口碑扑街!唐探3令人失望笑看新倚天屠龙记 灯谜答题王 |用Python做个海量小姐姐素描图 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
AI:会做诗的机器人 给图片上色 预测收入 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具:Pdf转Word,轻松搞定表格和水印!一键把html网页保存为pdf!再见PDF提取收费!用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换制作一款钉钉低价机票提示器!|60行代码做了一个语音壁纸切换器天天看小姐姐!|
相关文章
- 俄罗斯“老司机”必备应用软件
- 软件测试的目的有哪些?
- 实习生测量员组长测绘航测内业采集员测绘技术负责等多个岗位等你来应聘
- 基于WebAssembly的工业软件正在实现“云超车”
- 清华AI芯片天才再次风口创业 吸金上亿美元
- 苹果 iOS 16 锁屏界面显示APP实时活动
- 史上最强韦伯太空望远镜:任何不可靠的软件故障点都可能让百亿美元泡汤
- 生鲜配送软件有免费的么?
- 基于云数基座建设行业软件生态 —— 抓住软件定义的行业数字化发展机遇
- 流利说提供AI定制化培训方案帮助企业提升整体实力
- 基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的方法
- 哪些配音软件比较好?这些配音软件让你做好短视频剪辑
- 上音音乐美学论坛 5年形成前沿学术品牌
- 你一定要知道的十款主流画图软件淡定的工作从画出高品格图片开始
- 有哪些好用的修图的软件 实用的P图工具推荐
- 镝数图表携手腾讯文档让职场人真正用数据说话!
- 华安鑫创获32家机构调研:公司参与定制开发的液晶显示屏已经量产并运用于比亚迪的汉、唐、宋、秦等车型(附调研问答)
- 江西省森林火灾监测预警系统项目采购需求咨询论证公告
- 胡衡华在江北区调研时强调 把人气聚起来楼宇用起来产业兴起来 形成软件和信息服务企业“满天星”发展态势
- 软硬件相结合生态持续发力:PICO 4主打运动健身新场景