Wxpython wx.html2.WebView和屏幕阅读器

Wxpython wx.html2.WebView和屏幕阅读器,wxpython,accessibility,Wxpython,Accessibility,在wxPython 4.0 Phoenix中,我尝试将wx.html2.WebView与屏幕阅读器一起使用 无论是JAWS还是NVDA,我都必须用鼠标左键单击小部件,才能在可访问的Web界面中查看我的页面 这是我的代码,但是要知道我在LoadURL方法上也有同样的问题 我是否应该添加一些内容,以便小部件一显示,焦点就直接出现在web界面上 提前感谢您的回答 import wx import wx.html2 class MyWebView (wx.Dialog): def __ini

在wxPython 4.0 Phoenix中,我尝试将wx.html2.WebView与屏幕阅读器一起使用

无论是JAWS还是NVDA,我都必须用鼠标左键单击小部件,才能在可访问的Web界面中查看我的页面

这是我的代码,但是要知道我在LoadURL方法上也有同样的问题

我是否应该添加一些内容,以便小部件一显示,焦点就直接出现在web界面上

提前感谢您的回答

import wx
import wx.html2

class MyWebView (wx.Dialog):

    def __init__(self, parent):
        wx.Dialog.__init__(self, parent)
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.browser = wx.html2.WebView.New(self)
        self.changeBtn = wx.Button (self, -1, label="Change page")

        # The pages that I want to display disposed in a tuple.
        self.pages = (
        "<html><head><title>Hello everyone !</title></head><body><h1>We're testing wx.html2.WebView with a Screen Reader !</h1></body></html>",
        "<html><head><title>Second page !</title></head><body><h1>This is a second page</h1></body></html>",
        "<html><head><title>Third page !</title></head><body><h1>This is a third page</h1></body></html>"
        )

        self.index = 0
        self.display = self.pages[self.index]
        sizer.Add(self.browser, 1, wx.EXPAND, 10)
        sizer.Add(self.changeBtn)
        self.SetSizer(sizer)
        self.SetSize((700, 700))

    # Events.
        self.changeBtn.Bind (wx.EVT_BUTTON, self.onChangePage)

    def onChangePage (self, evt):
        self.index += 1
        if self.index == len (self.pages):
            self.index = 0
        self.display = self.pages[self.index]
        self.browser.SetPage(self.display, "")

if __name__ == '__main__':
    app = wx.App()
    dialog = MyWebView (None)
    dialog.browser.SetPage(dialog.display, "")
    dialog.Show ()
    app.MainLoop()
导入wx
导入wx.html2
类MyWebView(wx.Dialog):
定义初始化(自身,父级):
wx.Dialog.\uuuuu init\uuuuuuuuux(自,父)
sizer=wx.BoxSizer(wx.VERTICAL)
self.browser=wx.html2.WebView.New(self)
self.changeBtn=wx.按钮(self,-1,label=“更改页面”)
#我要显示的页面以元组的形式进行处理。
self.pages=(
“大家好!我们正在用屏幕阅读器测试wx.html2.WebView!”,
“第二页!这是第二页”,
“第三页!这是第三页”
)
self.index=0
self.display=self.pages[self.index]
sizer.Add(self.browser,1,wx.EXPAND,10)
sizer.Add(self.changeBtn)
自整定器(施胶器)
自我设置大小((700700))
#事件。
self.changeBtn.Bind(wx.EVT_按钮,self.onChangePage)
def onChangePage(自我,evt):
自索引+=1
如果self.index==len(self.pages):
self.index=0
self.display=self.pages[self.index]
self.browser.SetPage(self.display,“”)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
app=wx.app()
dialog=MyWebView(无)
dialog.browser.SetPage(dialog.display,“”)
dialog.Show()
app.MainLoop()

亲切问候。

在windows下,由于Internet explorer服务器存在奇怪的错误,您实际上需要单击小部件中的某个位置,以便屏幕阅读器可以与之交互。 一旦完成了最初的点击,屏幕阅读器就可以完美地使用这个小部件

<注意,同样的问题仍然发生在C++中的最新WXWIDGES3.1.3。 事实上,wxWidgets和wxPython都不对这个错误负责。直接使用ActiveX和Win32 API嵌入Internet Explorer服务器时也会发生这种情况

您可以生成所需的初始鼠标单击,以便通过以下方式访问小部件:

robot = wx.UIActionSimulator() 
self.browser.SetFocus() 
position = self.browser.GetPosition() 
position = self.browser.ClientToScreen(position) 
robot.MouseMove(position) 
robot.MouseClick() 
UIActionSimulator是一个类,允许像机器人一样生成用户事件。通常,它用于演示、UI自动测试或回放录制的宏。 在这里,我们使用它使所需的鼠标点击。 类似的解决方案也适用于C++。
  • 我们将焦点设置为小部件
  • 我们得到它相对于窗口的左上角位置
  • UIActionSimulator需要绝对屏幕坐标,因此我们需要转换位置
  • 我们移动鼠标并单击

  • 通过单击小部件最左上角的点,不太可能产生不想要的效果,但也并非完全不可能。

    在windows下,由于Internet explorer服务器存在奇怪的错误,您实际上需要单击小部件中的某个位置,以便屏幕阅读器可以与其交互。 一旦完成了最初的点击,屏幕阅读器就可以完美地使用这个小部件

    <注意,同样的问题仍然发生在C++中的最新WXWIDGES3.1.3。 事实上,wxWidgets和wxPython都不对这个错误负责。直接使用ActiveX和Win32 API嵌入Internet Explorer服务器时也会发生这种情况

    您可以生成所需的初始鼠标单击,以便通过以下方式访问小部件:

    robot = wx.UIActionSimulator() 
    self.browser.SetFocus() 
    position = self.browser.GetPosition() 
    position = self.browser.ClientToScreen(position) 
    robot.MouseMove(position) 
    robot.MouseClick() 
    
    UIActionSimulator是一个类,允许像机器人一样生成用户事件。通常,它用于演示、UI自动测试或回放录制的宏。 在这里,我们使用它使所需的鼠标点击。 类似的解决方案也适用于C++。
  • 我们将焦点设置为小部件
  • 我们得到它相对于窗口的左上角位置
  • UIActionSimulator需要绝对屏幕坐标,因此我们需要转换位置
  • 我们移动鼠标并单击
  • 通过点击小部件最左上角的点,不太可能产生不想要的效果,但也不是完全不可能