[
Brython
中文网 ](../index.html)
本教程说明了如何使用Python编程语言开发在浏览器中运行的应用程序。我们将以编写计算器为例。 您将需要一个文本编辑器,当然还需要一个可以访问互联网的浏览器。
本教程的内容假定您至少具有HTML(通用页面结构,最常用的标签),样式表(CSS)和Python语言的基本知识。 在文本编辑器中,创建具有以下内容的HTML页面:
1)使用“文件/打开”菜单:这是最简单的解决方案。它为高级使用带来了一些限制,但在本教程中效果很好
2)启动一个Web服务器:例如,如果您的机器上有python.org提供的Python解释器,则在文件目录中运行python -m http.server,然后在浏览器地址栏中输入localhost:8000/index.html
当您打开页面时,应该看到消息“ Hello!”。打印在浏览器窗口上。
页面结构
让我们看一下页面内容。在head区域中,我们加载脚本brython.js:这是Brython引擎,该程序将查找并执行页面中包含的Python脚本。在本例中,我们从CDN获得它,因此PC上没有任何安装。注意版本号(brython@3.8.9):可以为每个新的Brython版本进行更新。
body标记具有onload ="brython()"属性。这意味着页面完成加载后,浏览器必须调用函数brython(),该函数在页面加载的Brython引擎中定义。该函数搜索所有具有type ="text/python"属性的script标记并执行它们。
我们的index.html页面嵌入了以下脚本:
要将文本添加到document中-也就是在浏览器中显示文本-Brython使用的语法是
内容标签化
HTML标签允许文本格式设置,例如以粗体字母(B标签),斜体(I标签)等形式书写。
对于Brython,这些标签可利用browser包的html模块中定义的功能来实现。使用方法如下:
绘制计算器
我们可以用HTML表格绘制一个计算器。
第一行由结果区域组成,后跟一个重置按钮。接下来的3行是计算器的数字和运算符。
让我们来添加样式,以使计算器看起来更好:
事件处理
下一步是在用户按下计算器按键时触发动作:
1)数字和运算:在结果区域中打印数字或运算
2)=符号:执行操作并打印结果,如果输入无效,则显示错误消息
3)C符号:重置结果区域
要处理打印在页面中的元素,程序首先需要获得对它们的引用。这些按钮已被创建为标签。为了获得所有这些标签的引用,语法是
页面元素上可能发生的事件具有标准化名称:当用户单击按钮时,将触发名为“cick”的事件。在程序中,此事件会激发功能的执行。元素,事件和功能之间的关联由语法定义
完成编码
这是实现一个简易计算器的代码。最重要的部分是函数action(event)。
from browser import document, html
# Construction de la calculatrice
calc = html.TABLE()
calc <= html.TR(html.TH(html.DIV("0", id="result"), colspan=3) +
html.TD("C"))
lines = ["789/", "456*", "123-", "0.=+"]
calc <= (html.TR(html.TD(x) for x in line) for line in lines)
document <= calc
result = document["result"] # direct acces to an element by its id
def action(event):
"""Handles the "click" event on a button of the calculator."""
# The element the user clicked on is the attribute "target" of the
# event object
element = event.target
# The text printed on the button is the element's "text" attribute
value = element.text
if value not in "=C":
# update the result zone
if result.text in ["0", "error"]:
result.text = value
else:
result.text = result.text + value
elif value == "C":
# reset
result.text = "0"
elif value == "=":
# execute the formula in result zone
try:
result.text = eval(result.text)
except:
result.text = "error"
# Associate function action() to the event "click" on all buttons
for button in document.select("td"):
button.bind("click", action)