ボーダレスのPythonPyQtWebkitウィンドウを取得して、単一のWebサイトのhtmlフォームを表示しようとしています。[送信]をクリックすると、フォームの値が辞書に保存され、ウィンドウが閉じます。
これまでのところ(SOの助けを借りて)私はフチなしウィンドウを持っており、入力をフェッチすることができます。ただし、次の2つが欠けています。
- 送信を押した後、ウィンドウを閉じます。
- 辞書の入力を取得します(のキーはhtmlフォーム名
elements
に対応していることに注意してください)。elements
(潜在的には逆の方が良いでしょうが、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ページの周りに残っている小さな灰色の境界線を削除する方法も示します。
更新:Python2を使用しています。