在 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()
亲切的问候。
最佳答案
在 Windows 下,由于 Internet Explorer Server 的一个奇怪错误,您实际上需要单击小部件中的某个位置,以便屏幕阅读器可以与其交互。 一旦进行了初始点击,屏幕阅读器就可以与该小部件完美配合。
请注意,在 C++ 中最新的 wxWidgets 3.1.3 中仍然会出现同样的问题。 事实上,wxWidgets 和 wxPython 都不会对这个错误负责。当直接使用 ActiveX 和 Win32 API 嵌入 Internet Explorer Server 时也会发生这种情况。
您可以生成所需的初始鼠标单击,以便可以通过如下方式访问小部件:
robot = wx.UIActionSimulator()
self.browser.SetFocus()
position = self.browser.GetPosition()
position = self.browser.ClientToScreen(position)
robot.MouseMove(position)
robot.MouseClick()
wx.UIActionSimulator是一个类,允许像机器人一样生成用户事件。通常它用于演示、UI 自动化测试或重播录制的宏。 这里我们用它来进行所需的鼠标点击。 类似的解决方案也适用于 C++。
- 我们将焦点设置到小部件
- 我们得到它相对于窗口的左上角位置
- UIActionSimulator需要绝对屏幕坐标,因此我们需要转换位置
- 我们移动鼠标并点击
通过单击小部件的最左上角的点,不太可能产生不良效果,但并非完全不可能。
关于wxpython - wx.html2.WebView 和屏幕阅读器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55345724/