wx.html2.WebView表格GET没有填写网址参数

时间:2018-03-04 16:51:36

标签: wxpython wx.html2

我正在尝试将简单表单​​的内容传递给表单提交时的URL参数。 HTML代码适用于在线HTML模拟器,但在wx.html2.WebView中不起作用。使用wxPython v4和python 3.6。用于演示问题的代码,

import wx
import wx.html2


class MyBrowser(wx.Dialog):

    def __init__(self, *args, **kwds):
        wx.Dialog.__init__(self, *args, **kwds)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.browser = wx.html2.WebView.New(self)
        sizer.Add(self.browser, 1, wx.EXPAND, 10)
        self.SetSizer(sizer)
        self.SetSize((700, 700))

        self.Bind(wx.html2.EVT_WEBVIEW_NAVIGATING, self.OnHTMLNavigate, self.browser)

    def OnHTMLNavigate(self, event):
        targetUrl = event.GetURL()
        print(targetUrl) # format about:<link_info>
        event.Veto()  # stops the link from executing

if __name__ == '__main__':
    app = wx.App()
    dialog = MyBrowser(None, -1)

    text = """
<!DOCTYPE html>
<html>
<body>
<form action="/action_page.php" method="get">
  First name: <input type="text" name="fname"><br>
  <input type="submit" value="Submit">
</form>
<p>Click on the submit button, and the input will be sent to a page on the server called "/action_page.php".</p>
</body>
</html>                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
"""

    dialog.browser.SetPage(html=text, baseUrl="")
    dialog.Show()
    app.MainLoop()

该程序的输出是,

about:/action_page.php

而在html模拟器中,它是,

/action_page.php?fname=myname

我想要做的核心是从html2.WebView获取信息回到python程序。我找到的唯一方法是拦截导航事件,并解析URL参数。我在鲁宾的一篇文章中找到了这种方法。

作为旁注,我能够使用javascript构造来实现按钮所需的结果,也就是说,URL告诉我从webview中按下了哪个按钮。这是一个片段,解释了我是如何做到的,

<input id="myButton" type="button" class="button" \
                   onclick="location.href='action/?type=button&name=myButton&cb=myCallback&text=myButtonLabel';" \
                   value="myButtonLabel" />

按钮成语对我来说非常有效,因为我能够使用我需要的额外参数构建URL,例如回调允许我让每个按钮调用不同的回调。理想情况下,我也想用表格来做这件事。那么,如果有另一种方法(javascript?)我可以用我的额外信息和文本表单数据创建表单URL GET提交响应,我将感激不尽。

免责声明:我不是任何一个网络开发人员。但是我必须通过webview呈现...我曾经使用wxPython html窗口,但毕业于html2.webview以尝试获得更多功能。

1 个答案:

答案 0 :(得分:0)

无法弄清楚上述问题,但最终找到了最终解决方案,看起来像这样,

<form>
  myEnterTextLabel:<br><input type="text" id="myID">
  <input type="button" value="Submit" onclick="text_entry_action('myCh', 'myID', 'myCB')">
  <script type="text/javascript">
    function text_entry_action(ch, id, cb) {
      var input_obj = document.getElementById(id);
      var myurl = ch + "/?type=text_entry&value=" + input_obj.value + "&cb=" + cb;
      window.location.href = myurl;
    }
  </script>
</form>

在应用程序中我所有的&lt;&gt;在将代码段发送到网页视图之前,以编程方式填充上述代码段中的值。

然后使用上面的OnHTMLNavigate()方法,您可以截取URL,拉出值,并可以使用getattr()函数从回调字符串运行方法。从webview上下文回到python上下文。