【发布时间】:2012-09-02 22:18:02
【问题描述】:
我正在尝试获取一个无边框的 python PyQt webkit 窗口来显示单个网站 html 表单。单击发送时,表单值应保存在字典中并关闭窗口。
到目前为止(在SO 的帮助下)我有无边框窗口并且可以获取输入。但是,缺少两件事:
- 按发送后关闭窗口。
- 在字典
elements中获取输入(注意elements的键对应于html 表单名称)。
(可能反过来会更好,但 1 似乎更难)
到目前为止我的代码是:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *
elements = {"like":"", "text": ""}
class MyWebPage(QWebPage):
def acceptNavigationRequest(self, frame, req, nav_type):
if nav_type == QWebPage.NavigationTypeFormSubmitted:
text = "<br/>\n".join(["%s: %s" % pair for pair in req.url().queryItems()])
print(text)
return True
else:
return super(MyWebPage, self).acceptNavigationRequest(frame, req, nav_type)
class Window(QWidget):
def __init__(self, html):
super(Window, self).__init__()
self.setWindowFlags(Qt.FramelessWindowHint)
view = QWebView(self)
layout = QVBoxLayout(self)
layout.addWidget(view)
view.setPage(MyWebPage())
view.setHtml(html)
# 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>
"""
def main():
app = QApplication(sys.argv)
window = Window(html)
window.show()
app.exec_()
if __name__ == "__main__":
main()
一个完美的答案不仅会显示如何(a) 保存输入 和(b) 关闭窗口,而且(c) 还可以删除html 页面周围剩余的灰色小边框。
更新:我使用 Python 2。
【问题讨论】: