如何使用python在本地显示带有html表单的网站并收集用户输入?
作者:互联网
我是一名行为科学家,通常通过让参与者在计算机上执行某些任务并记录他们的响应来收集数据(我使用pyglet包装器PsychoPy编写程序).也就是说,程序在本地运行,数据存储在本地.
现在我想知道是否有办法使用Python向用户显示带有html表单的(本地)网站并收集输入(本地).这个想法的原因是,当我想要显示复选框,单选按钮或输入字段时,我使用wxPython.这很好用,但是wxPython中的编程和布局有点麻烦,我更喜欢带表单的html.
一个要求是它需要朗姆酒没有任何边框,地址字段,菜单栏,…原因是我需要它以某种全屏模式(我目前打开一个非全屏pygflet窗口的大小的屏幕以隐藏桌面),以便参与者除了处理表单之外什么都不做.
所以我正在寻找一种方法来(a)显示html网站,包括没有菜单栏的pyglet窗口上面的html表格,或者(b)点击Ok按钮收集输入(即表格发送),( c)控制在查看本网站之前和之后呈现的内容,以及(d)所有内容都应在本地进行!
我的想法是,当参与者点击以下示例pic中的“发送”按钮并显示下一页时,将收集数据.
更新:我使用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,forms,user-input 来源: https://codeday.me/bug/20191007/1866312.html