- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
帮助使用 Brython 在 Python 中运行一个简单的程序。
基础是从示例中获取的(它没有工作)文件 http://www.brython.info/gallery/pygame/chimp.html
同一目录下有3个文件:Eventlist.html
、py_VFS.js
、brython.js
。
py_VFS.js
:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL py_VFS.js was not found on this server.</p>
</body></html>
brython.js
:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL brython.js was not found on this server.</p>
</body></html>
Eventlist.html
行中的固定路径:
<script type="text/javascript" src="external/brython/brython.js"></script>
<script type="text/javascript" src="external/brython/py_VFS.js"></script>
替换了Python的一个模块(pygame\examples\eventlist.py的标准单元)。结果,Eventlist.html 的全部代码:
<html>
<head>
<script type="text/javascript" src="brython.js"></script>
<script type="text/javascript" src="py_VFS.js"></script>
<script type="text/python">
#!/usr/bin/env python
"""Eventlist is a sloppy style of pygame, but is a handy
tool for learning about pygame events and input. At the
top of the screen are the state of several device values,
and a scrolling list of events are displayed on the bottom.
This is not quality 'ui' code at all, but you can see how
to implement very non-interactive status displays, or even
a crude text output control.
"""
from pygame import *
ImgOnOff = []
Font = None
LastKey = None
def showtext(win, pos, text, color, bgcolor):
textimg = Font.render(text, 1, color, bgcolor)
win.blit(textimg, pos)
return pos[0] + textimg.get_width() + 5, pos[1]
def drawstatus(win):
bgcolor = 50, 50, 50
win.fill(bgcolor, (0, 0, 640, 120))
win.blit(Font.render('Status Area', 1, (155, 155, 155), bgcolor), (2, 2))
pos = showtext(win, (10, 30), 'Mouse Focus', (255, 255, 255), bgcolor)
win.blit(ImgOnOff[mouse.get_focused()], pos)
pos = showtext(win, (330, 30), 'Keyboard Focus', (255, 255, 255), bgcolor)
win.blit(ImgOnOff[key.get_focused()], pos)
pos = showtext(win, (10, 60), 'Mouse Position', (255, 255, 255), bgcolor)
p = '%s, %s' % mouse.get_pos()
pos = showtext(win, pos, p, bgcolor, (255, 255, 55))
pos = showtext(win, (330, 60), 'Last Keypress', (255, 255, 255), bgcolor)
if LastKey:
p = '%d, %s' % (LastKey, key.name(LastKey))
else:
p = 'None'
pos = showtext(win, pos, p, bgcolor, (255, 255, 55))
pos = showtext(win, (10, 90), 'Input Grabbed', (255, 255, 255), bgcolor)
win.blit(ImgOnOff[event.get_grab()], pos)
def drawhistory(win, history):
win.blit(Font.render('Event History Area', 1, (155, 155, 155), (0,0,0)), (2, 132))
ypos = 450
h = list(history)
h.reverse()
for line in h:
r = win.blit(line, (10, ypos))
win.fill(0, (r.right, r.top, 620, r.height))
ypos -= Font.get_height()
def main():
init()
win = display.set_mode((640, 480), RESIZABLE)
display.set_caption("Mouse Focus Workout")
global Font
Font = font.Font(None, 26)
global ImgOnOff
ImgOnOff.append(Font.render("Off", 1, (0, 0, 0), (255, 50, 50)))
ImgOnOff.append(Font.render("On", 1, (0, 0, 0), (50, 255, 50)))
history = []
#let's turn on the joysticks just so we can play with em
for x in range(joystick.get_count()):
j = joystick.Joystick(x)
j.init()
txt = 'Enabled joystick: ' + j.get_name()
img = Font.render(txt, 1, (50, 200, 50), (0, 0, 0))
history.append(img)
if not joystick.get_count():
img = Font.render('No Joysticks to Initialize', 1, (50, 200, 50), (0, 0, 0))
history.append(img)
going = True
while going:
for e in event.get():
if e.type == QUIT:
going = False
if e.type == KEYDOWN:
if e.key == K_ESCAPE:
going = False
else:
global LastKey
LastKey = e.key
if e.type == MOUSEBUTTONDOWN:
event.set_grab(1)
elif e.type == MOUSEBUTTONUP:
event.set_grab(0)
if e.type == VIDEORESIZE:
win = display.set_mode(e.size, RESIZABLE)
if e.type != MOUSEMOTION:
txt = '%s: %s' % (event.event_name(e.type), e.dict)
img = Font.render(txt, 1, (50, 200, 50), (0, 0, 0))
history.append(img)
history = history[-13:]
drawstatus(win)
drawhistory(win, history)
display.flip()
time.wait(10)
quit()
if __name__ == '__main__':
main()
</script>
</head>
<body onload="brython({debug:1})">
<div id="pydiv"></div>
</body>
</html>
当您运行 Eventlist.html
时,浏览器中会显示一个空白页面。文件 eventlist.py
中的代码有效,结果如下:
因此,我想在浏览器中得到一个类似的窗口。
最佳答案
这几天我花了一些时间试图获得 Brython-PyGame在浏览器中工作并得出结论:
详情如下:
实现不完整
Brython-PyGame 有许多未实现的函数。其中一些可以被认为是非关键的(例如,模块 transform.py 完全缺失)。但是其他的则是任何 PyGame 程序的核心。例如,event.py module 中的所有非平凡函数,例如 event.get()
和 event.wait()
,依赖于对 SDL.py 中未实现函数的调用,例如 SDL_WaitEventAndReturn()
和 SDL_PeepEvents()
。如果没有这些函数之一作为其事件循环的基础,任何重要的 PyGame 程序都无法运行。
基本设计差异
event.wait()
从未完全实现这一事实并非巧合。此函数是 PyGame 和客户端 Web 编程之间概念设计差异的核心:
因此,对 event.wait()
的调用不可能在浏览器的客户端实现,该调用会阻塞直到发生鼠标移动等事件。
在其他情况下,PyGame 也会以 JavaScript 不允许的方式使用阻塞调用。例如,考虑以下看似无辜的 PyGame 片段:
import pygame as pg
img = pg.image.load('flag.png')
screen.blit(img, (0,0))
这会加载一个图像文件并将其呈现在屏幕上。在后台,当文件被读入内存时,pg.image.load
命令阻塞。在 Brython-PyGame 中,实现尝试从给定的 URL 读取文件。但是,读取 URL 在 JavaScript 中是非阻塞操作,因为所需的网络操作可能需要一段时间,我们不希望 UI 线程在完成之前阻塞。在 JavaScript 中,人们会实现类似的操作,例如
var img = new Image();
ctx = getContextForSomeCanvas();
img.onload = function() {
ctx.drawImage(img, 0, 0);
}
img.src = 'flag.png';
其中 onload
回调确保 ctx.drawImage
仅在图像加载后执行。将以前的 Python 代码转换成类似于上述 JavaScript 的代码并非易事:它需要对异步加载操作进行一些幕后处理,这将延迟对 blit()
的调用,直到图像被加载加载。即使这行得通,对于一个天真的 PyGame 程序员来说也是非常不直观的,并且很容易在代码的后面导致错误(例如,如果代码假设鼠标点击是在图像上,即使它没有被加载)然而)。无论如何,Brython-PyGame 实现没有实现这种幕后处理,导致上述代码失败,因为图像在加载之前会被 block 化。
关于javascript - HTML、Python、Brython、javascript - 在 Brython 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40300705/
帮助使用 Brython 在 Python 中运行一个简单的程序。 基础是从示例中获取的(它没有工作)文件 http://www.brython.info/gallery/pygame/chimp.h
我有一段用 Python 编写的代码。我想将该代码放在网页中。 Brython 似乎是将这两件事粘合在一起的最简单方法,但我没有可以在服务器端实际运行代码的服务器。 Brython 是否需要服务器端代
我目前正在尝试将 Brython 用于我正在制作的网站,但我无法从用户那里获取我的程序的数据。 我设置了一个框供用户输入 ID... ...然后我使用的当前方法是使用 GET 方法使其
我希望在 Brython 中导入我自己的库。 This page of the documentation旨在展示如何通过将适当的目录添加到 python 路径,但我无法使其工作,因为我无法使 Bry
几天来我一直在研究 Python,我已经到了想要将我的 Python 应用程序代码放到 Web 上的地步。基本上,该应用程序是关于向用户提出问题并根据用户的回答 [他在应用程序中输入] 来计算分数,然
晚安。这是一个关于Brython的问题欢迎任何帮助。 我正在寻找一种在每个时间间隔(可能是 200 毫秒)向左(或向右、顶部等)移动元素(例如,div)一些像素的方法。谁能帮帮我? 一旦他到达左边距就
我最近正在尝试 Brython,但我无法弄清楚如何在 Canvas 上绘制一个简单的矩形。我只能找到非常复杂的在 Canvas 上绘制的示例,这些示例对我来说不起作用,而且我无法在文档中找到明确的答案
我正在使用 Flask 编写一个 Web 应用程序,并且想在 Brython 中使用 browser.ajax 功能,但找不到可行的示例。如果有人演示如何在 Brython 中使用 ajax 的简短示
我正在加载 Brython 和 iFlyChat,但如果未注释 iFlyChat 脚本,Brython 将无法工作。我尝试了各种异步组合,但似乎有一些更基本的东西。 JSFiddle here和下面的
我的要求:从ID=“rtfile1”的输入类型=“file”读取内容并将其写入ID为“rt1”的文本区域 基于 [ https://brython.info/][1] 的文档我尝试读取文件,但失败并出
我对 Brython 框架很陌生,所以我的问题将是一个基本问题。对此深表歉意。 这是我的脚本“log.py”: import math class Logarithm: def__init__
所以我有以下困境: 我正在使用 Brython,一切正常。我有一小段代码可以为我执行 ajax 请求,我将其添加到 header 中以绑定(bind)页面中当前元素上的所有内容。 from b
我想在 brython 中使用 numpy。但我不知道如何在 brython 中导入额外的模块。如果您有类似的经历或疑问,请告诉我解决方法 最佳答案 你不能。Brython 是一个从类似 Python
我想在 brython 中使用 numpy。但我不知道如何在 brython 中导入额外的模块。如果您有类似的经历或疑问,请告诉我解决方法 最佳答案 你不能。Brython 是一个从类似 Python
编辑:Google Group post 我正在玩 Brython . 我正在尝试找出如何从 JavaScript 执行 Brython 代码。 http://www.brython.info/sta
首先感谢大家的帮助,这个问题困扰了我几天。我的母语不是英语,所以如果我犯了一些语法错误或问题描述不清楚,请原谅我。 :) 本来我只是一个只会用Python的爬虫。但是,我的公司希望我开发一种工具,可以
所以我尝试在 brython 中使用 websockets,这是 python3 的 javascript 实现。不幸的是,我运气不佳。 根据文档,函数 JSObject() 可用于在 brython
我很高兴看到现在可以在浏览器中编写Python代码了。这些是主要候选人(请添加我可能忽略的任何内容): Brython Skulpt PyPy.js Transcrypt Pyodide 但是如何在它
看来初始化brython需要这样: 我尝试在另一个 的 js 中调用 brython()在链接了 brython.js 但它似乎没有被调用之后。 当我最终在浏览器控制台中调用 brython 时,
我尝试使用 Brython。我有一个 Python 脚本 (test.py),我想在浏览器中显示该脚本的结果。 我试过了: 我的脚本是: x = int(input("Value: "
我是一名优秀的程序员,十分优秀!