我正在尝试获得一个无边框的 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。