ToB企服应用市场:ToB评测及商务社交产业平台

标题: pywebview桌面步伐开辟(技能路线:前端+Python,全网独一份!!!!!!) [打印本页]

作者: 千千梦丶琪    时间: 2024-7-11 06:24
标题: pywebview桌面步伐开辟(技能路线:前端+Python,全网独一份!!!!!!)
一、pywebview

官网:https://pywebview.flowrl.com/
1、简介

pywebview声称Build GUI for your Python program with JavaScript, HTML, and CSS。就是可以利用web技能来实现桌面应用步伐开辟。其内核我明白仍然是浏览器,只不过将浏览器封装成体系窗口,如许就可以将web无缝切换到桌面应用,相比pyQt等重武器还是比较方便的。
对于目前比较火的electron,Python的参加给应用步伐提供了上限,据说打包的巨细也比electron小。
2、安装

  1. pip install pywebview
复制代码
Hello world 的demo:
  1. import webview
  2. webview.create_window('Hello world', 'https://pywebview.flowrl.com/')
  3. webview.start()
复制代码
3、依靠

windows步伐依靠pythonnet(要求 > .NET 4.0),pythonnet可以让python调用.NET代码。
为了利用最新版本的 Chromium(Chromium是谷歌的开源项目,国产的全部 “双核浏览器”,都是基于 Chromium 开辟的,乃至 Chrome 也是基于它。),需要安装WebView2。
选择Web应用还是原生应用来开辟是一种在通用性和本地权限之前的权衡。WebApp兼容的范围很广,而且Web前端代码基于浏览器天生跨平台,而且前端框架多好开辟。而原生应用有很大本地权限,可以举行各种文件和操作体系接口的调用。WebView可以联合这两者的优点举行开辟。WebView2允许你在本地App内里嵌入web相关的技能(例如HTML,CSS和JavaScript)。WebView2控件利用微软的Edge作为渲染引擎,你可以嵌入一部分或者整个App都用WebView来做。
WebView2下载地址:https://developer.microsoft.com/en-us/microsoft-edge/webview2/?form=MA13LH
4、利用

4.1、最简朴示例

  1. import webview
  2. window = webview.create_window('Woah dude!', 'https://pywebview.flowrl.com')
  3. webview.start()
复制代码

4.2、http server示例

pywebview提供一个与WSGI兼容的http服务器。
  1. import webview
  2. webview.create_window('Woah dude!', 'index.html')
  3. webview.start(http_server=True)
复制代码
将http_server设为true
一般利用外部WSGI兼容的http服务器,将服务器对象作为url转达
  1. from flask import Flask
  2. import webview
  3. server = Flask(__name__, static_folder='./assets', template_folder='./templates')
  4. webview.create_window('Flask example', server)
  5. webview.start()
复制代码
4.3、线程模子

webview.start会开启一个GUI循环,并且它是一个壅闭函数。当GUI循环被壅闭时,必须在一个单独的线程和进程中实行后端逻辑
。可以通过手动开启线程/进程,或者将函数作为要启动的第一个参数来启动。第二个参数设置函数的参数。这种方法会在后台启动一个线程,与手动起一个线程相同。
  1. import webview
  2. def custom_logic(window):
  3.     window.evaluate_js('alert("welcome")')
  4. window = webview.create_window('Woah dude!', html='<h1>Woah dude!<h1>')
  5. webview.start(custom_logic, window)
  6. # anything below this line will be executed after program is finished executing
  7. print(2)#只有窗口关闭了才能打印
复制代码
4.4、Python与evaluate_js通讯


4.5、变乱

Windows对象有很多声明周期变乱,订阅变乱利用+=语法,即windows.events.loaded+=函数名,变乱触发时会调用该函数,不能重复订阅,多次订阅也只调用一次。取消订阅利用windows.events.loaded-=函数名。

5、常用示例

5.1、10秒后改变加载的url

  1. import time
  2. import webview
  3. def change_url(window):
  4.     # wait a few seconds before changing url:
  5.     time.sleep(10)
  6.     # change url:
  7.     window.load_url('https://pywebview.flowrl.com/hello')
  8. if __name__ == '__main__':
  9.     window = webview.create_window('URL Change Example', 'http://www.google.com')
  10.     webview.start(change_url, window)
复制代码
5.2、带有确认对话框的窗口

  1. import webview
  2. def open_confirmation_dialog(window):
  3.     result = window.create_confirmation_dialog('Question', 'Are you ok with this?')
  4.     if result:
  5.         print('User clicked OK')
  6.     else:
  7.         print('User clicked Cancel')
  8. if __name__ == '__main__':
  9.     window = webview.create_window(
  10.         'Confirmation dialog example', 'https://pywebview.flowrl.com/hello'
  11.     )
  12.     webview.start(open_confirmation_dialog, window)
复制代码
5.3、常用变乱

  1. import webview
  2. def on_closed():
  3.     print('pywebview window is closed')
  4. def on_closing():
  5.     print('pywebview window is closing')
  6. def on_shown():
  7.     print('pywebview window shown')
  8. def on_minimized():
  9.     print('pywebview window minimized')
  10. def on_restored():
  11.     print('pywebview window restored')
  12. def on_maximized():
  13.     print('pywebview window maximized')
  14. def on_resized(width, height):
  15.     print(
  16.         'pywebview window is resized. new dimensions are {width} x {height}'.format(
  17.             width=width, height=height
  18.         )
  19.     )
  20. def on_loaded():
  21.     print('DOM is ready')
  22.     # unsubscribe event listener
  23.     webview.windows[0].events.loaded -= on_loaded
  24.     webview.windows[0].load_url('https://pywebview.flowrl.com/hello')
  25. def on_moved(x, y):
  26.     print('pywebview window is moved. new coordinates are x: {x}, y: {y}'.format(x=x, y=y))
  27. if __name__ == '__main__':
  28.     window = webview.create_window(
  29.         'Simple browser', 'https://pywebview.flowrl.com/', confirm_close=True
  30.     )
  31.     window.events.closed += on_closed
  32.     window.events.closing += on_closing
  33.     window.events.shown += on_shown
  34.     window.events.loaded += on_loaded
  35.     window.events.minimized += on_minimized
  36.     window.events.maximized += on_maximized
  37.     window.events.restored += on_restored
  38.     window.events.resized += on_resized
  39.     window.events.moved += on_moved
  40.     webview.start(debug=True)
复制代码
5.4、文件打开

  1. import webview
  2. def open_file_dialog(window):
  3.     file_types = ('Image Files (*.bmp;*.jpg;*.gif)', 'All files (*.*)')
  4.     result = window.create_file_dialog(
  5.         webview.OPEN_DIALOG, allow_multiple=True, file_types=file_types
  6.     )
  7.     print(result)#result为文件的绝对路径
  8. if __name__ == '__main__':
  9.     window = webview.create_window('Open file dialog example', 'https://pywebview.flowrl.com/hello')
  10.     webview.start(open_file_dialog, window)
复制代码
5.5、文件保存

  1. import webview
  2. def save_file_dialog(window):
  3.     import time
  4.     time.sleep(5)
  5.     result = window.create_file_dialog(
  6.         webview.SAVE_DIALOG, directory='/', save_filename='test.file'
  7.     )
  8.     print(result)
  9. if __name__ == '__main__':
  10.     window = webview.create_window('Save file dialog', 'https://pywebview.flowrl.com/hello')
  11.     webview.start(save_file_dialog, window)
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4