python - 如何使用 python 在本地显示带有 html 表单的网站并收集用户输入?

标签 python user-input forms

我是一名行为科学家,通常通过让参与者在计算机上完成一些任务并记录他们的 react 来收集数据(我使用 pyglet 包装器编写程序 PsychoPy )。即程序在本地运行,数据存储在本地。

现在我想知道是否有一种方法可以使用 Python 向用户显示带有 html 表单的(本地)网站并收集输入(本地)。这个想法的原因是,目前每当我想显示复选框、单选按钮或输入字段时,我都使用 wxPython。这工作得很好,但在 wxPython 中编程和布局有点麻烦,我更喜欢带有表单的 html。

一个要求是它需要没有任何边框、地址字段、菜单栏......原因是我需要它在全屏模式下(我目前打开一个非全屏 pygflet 窗口屏幕大小以隐藏桌面),以便参与者只能处理表格。

所以我正在寻找一种方法来 (a) 在没有菜单栏或任何其他内容的 pyglet 窗口上方显示 html 网站,包括 html 表单,(b) 在单击“确定”按钮时收集输入(即表单已发送),(c) 控制浏览本网站之前和之后呈现的内容,以及 (d) 这一切都应该在本地发生!

我的想法是,当参与者点击以下示例图片中的“发送”按钮并显示下一页时,就会收集数据。

example form

更新:我使用的是 Windows(XP 或 7)。

最佳答案

这是一个使用 Qt Webkit 渲染 HTML 的解决方案。默认导航请求处理程序由检查提交的表单请求的函数包装。该表单使用“get”方法,因此数据包含在请求的 url 中,并且可以通过这种方式检索。原始请求被拒绝,您可以根据需要更改显示网页的内容。

from PyQt4 import QtGui, QtWebKit

app = QtGui.QApplication([])
view = QtWebKit.QWebView()

# intercept form submits
class MyWebPage(QtWebKit.QWebPage):
    def acceptNavigationRequest(self, frame, req, nav_type):
        if nav_type == QtWebKit.QWebPage.NavigationTypeFormSubmitted:
            text = "<br/>\n".join(["%s: %s" % pair for pair in req.url().queryItems()])
            view.setHtml(text)
            return False
        else:
            return super(MyWebPage, self).acceptNavigationRequest(frame, req, nav_type)
view.setPage(MyWebPage())

# setup the html form
html = """
<form action="" method="get">
Like it?
<input type="radio" name="like" value="yes"/> Yes
<input type="radio" name="like" value="no" /> No
<br/><input type="text" name="text" value="Hello" />
<input type="submit" name="submit" value="Send"/>
</form>
"""
view.setHtml(html)

# run the application
view.show()
app.exec_()

关于python - 如何使用 python 在本地显示带有 html 表单的网站并收集用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10121864/

相关文章:

python - 保存不带关键字的 Python crontab

python - pyparsing 中的 python 列表(嵌套)解析器是什么样的?

input - 如何将 div 制作为输入文本表单?

c++ - 输入第一个字符后如何忽略一切

javascript - 无法使用 JavaScript 更改表单输入值

jquery - iOS 中的文本字段之间的自动制表符

python - Pandas :如何绘制两个类别和四个系列的条形图?

python - 返回超过 2 个并排匹配的数字的匹配项

javascript - 如何使 JavaScript 中的元素恢复为不可编辑状态?

javascript - Chrome/Firefox 中的不同表单行为