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

Hen*_*rik 3 python forms user-input

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

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

要求是它需要朗姆酒而没有任何边框,地址字段,菜单栏等。原因是我需要在全屏模式下使用(我目前以大小不等的方式打开非全屏pygflet窗口。屏幕以隐藏桌面),以便参与者只能执行表单上的操作。

因此,我正在寻找一种方法(a)在没有菜单栏或任何菜单的pyglet窗口上方显示html表单,包括html表单;(b)单击“确定”按钮时收集输入(即,表单已发送),( c)控制在查看本网站之前和之后显示的内容,并且(d)所有这些都应在本地进行!

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

示例表格

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

pwu*_*rtz 5

这是使用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_()
Run Code Online (Sandbox Code Playgroud)