谁说Python GUI难?用pywebview打造现代化GUI界面

2024-06-13 15:44

本文主要是介绍谁说Python GUI难?用pywebview打造现代化GUI界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Python的世界里,我们经常需要为程序添加一个图形用户界面(GUI)。传统上,Tkinter、PyQt或Kivy等库是常用的选择。但是,今天我们要介绍的是一个更简单、更现代的方法——pywebview。它让你可以使用HTML、CSS和JavaScript来创建漂亮的桌面应用程序界面,同时在Python中处理逻辑。

 什么是pywebview?

 pywebview是一个轻量级的跨平台库,它可以让你在Python程序中嵌入一个浏览器窗口。你可以使用你熟悉的前端技术(HTML、CSS、JavaScript)来设计界面,并使用Python来处理后台逻辑。这种方式不仅简化了GUI编程的复杂度,还能让你的应用程序看起来更现代。

 

 为什么选择pywebview?

  • • 简单易用:不需要深入了解前端技术,就可以创建美观的网页界面。

  • • 跨平台:支持Windows、macOS和Linux。

  • • 轻量级:不需要安装额外的运行时环境或浏览器。

安装pywebview

使用pip安装pywebview非常简单,只需要在命令行中输入以下命令:

pip install pywebview

接下来,让我们编写一个简单的示例程序,展示如何使用pywebview创建一个基本的窗口。

import webviewdef main():webview.create_window('Hello World', 'https://www.baidu.com')webview.start()if __name__ == '__main__':main()

运行这个程序,你会看到一个窗口打开并加载了https://www.baidu.com。这就是pywebview的基本用法。

 更进一步:与Python交互

仅仅显示一个网页可能并不能满足你的需求。接下来,我们看看如何通过JavaScript和Python进行交互。

创建一个带有按钮的HTML页面

首先,我们需要一个简单的HTML页面,包含一个按钮。当按钮被点击时,它会调用Python函数。

<!DOCTYPE html>
<html>
<head><title>pywebview Example</title>
</head>
<body><h1>Hello, pywebview!</h1><button onclick="callPython()">Call Python</button><script type="text/javascript">function callPython() {window.pywebview.api.say_hello('World').then(response => {alert(response);});}</script>
</body>
</html>
import webview
import timeclass API:def say_hello(self, name):time.sleep(2)  # 模拟一个耗时操作return f'Hello, {name}!'def main():api = API()webview.create_window('pywebview Example', 'index.html', js_api=api)webview.start()if __name__ == '__main__':main()

在这个示例中,我们定义了一个API类,其中包含一个say_hello方法。我们将这个API实例传递给pywebview.create_window,这样前端的JavaScript就可以通过window.pywebview.api来调用这个方法。

进阶:加载本地HTML文件

有时候,我们可能希望将HTML文件打包在应用程序中,而不是从外部加载。我们可以将HTML文件保存在项目目录中,并使用file://协议来加载它。

假设我们有一个名为index.html的文件,我们可以这样加载它:

import webviewdef main():webview.create_window('Local HTML Example', 'file://path/to/index.html')webview.start()if __name__ == '__main__':main()

实战案例:一个简单的记事本应用

最后,让我们结合以上知识,创建一个简单的记事本应用。

HTML文件(notepad.html)

<!DOCTYPE html>
<html>
<head><title>Simple Notepad</title>
</head>
<body><h1>Simple Notepad</h1><textarea id="note" rows="10" cols="30"></textarea><br><button onclick="saveNote()">Save</button><button onclick="loadNote()">Load</button><script type="text/javascript">function saveNote() {const note = document.getfunction saveNote() {const note = document.getElementById('note').value;window.pywebview.api.save_note(note).then(response => {alert(response);});}function loadNote() {window.pywebview.api.load_note().then(note => {document.getElementById('note').value = note;});}}
</script>
</body>
</html>

在这个HTML文件中,我们添加了两个按钮,一个用于保存文本内容,另一个用于加载文本内容。点击按钮时,会调用相应的JavaScript函数,这些函数通过window.pywebview.api与Python后台进行通信。

Python 后台逻辑

接下来,我们编写Python代码,处理保存和加载记事本内容的逻辑。

import webview
import json
import osclass API:def __init__(self):self.file_path = 'note.json'def save_note(self, note):with open(self.file_path, 'w') as f:json.dump({'note': note}, f)return 'Note saved successfully!'def load_note(self):if os.path.exists(self.file_path):with open(self.file_path, 'r') as f:data = json.load(f)return data.get('note', '')return ''
def main():api = API()webview.create_window('Simple Notepad', 'index.html', js_api=api)webview.start()if __name__ == '__main__':main()

 在这个Python脚本中,我们定义了一个API类,该类包含两个方法:save_note和load_note。save_note 方法接收前端传来的记事本内容,并将其保存到一个名为note.json的文件中.load_note 方法从文件中读取记事本内容,并返回给前端。

我们还在main函数中创建了一个API实例,并将其传递给webview.create_window,这样前端的JavaScript就可以通过window.pywebview.api来调用API类中的方法。

通过这个简单的记事本应用,我们可以看到pywebview如何让Python和前端技术(HTML、CSS、JavaScript)无缝结合,创建现代化的桌面应用程序。

结语:

感谢大家的观看!

喜欢学习Pyhon及副业知识+全套Python学习资料【戳这里免废领~】

这篇关于谁说Python GUI难?用pywebview打造现代化GUI界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057728

相关文章

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Python包管理工具pip的升级指南

《Python包管理工具pip的升级指南》本文全面探讨Python包管理工具pip的升级策略,从基础升级方法到高级技巧,涵盖不同操作系统环境下的最佳实践,我们将深入分析pip的工作原理,介绍多种升级方... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核