PyQt网页浏览器:如何在不点击鼠标的情况下聚焦网页

1 投票
2 回答
2366 浏览
提问于 2025-04-16 20:29

我正在为一个没有鼠标输入的嵌入式设备写一个应用程序。这个网页浏览器非常简单,没有按钮、地址栏、文件栏等等。目前,它只是加载一个网页。这个网页使用JavaScript来捕捉键盘按键事件以执行一些操作。

我遇到的问题是,当浏览器加载时,按键事件没有被捕捉到。我发现这个问题可能是因为“焦点”没有正确设置。当浏览器加载时,它没有获得焦点,直到应用程序上发生一次鼠标点击。但由于我没有鼠标,所以这个初始点击无法发生。

我该如何确保浏览器应用程序能够正确获得焦点,以便当我从终端或脚本启动它时,它能立即获得焦点,从而可以捕捉到键盘事件呢?

我的代码如下:

#!/usr/bin/env python
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

app = QApplication(sys.argv)
web = QWebView()
web.showFullScreen()
web.load(QUrl("http://www.google.com"))
sys.exit(app.exec_())

我用的QWidget.setFocus()没有效果,假设我用得没错。任何帮助都非常感谢。谢谢!

2 个回答

0

我在我的笔记本上试了你的代码,发现QWebView已经有焦点了——一旦谷歌加载完成,我就可以输入文字,文本框里也能显示我的输入。

如果这是个焦点问题,因为QWebView是从QWidget继承来的,你可以调用它的 setFocus() 方法。下面是你的代码,增加了一行代码,在页面加载完成后调用QWebView的setFocus方法:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *

app = QApplication(sys.argv)
web = QWebView()
web.loadFinished.connect(web.setFocus)
web.showFullScreen()
web.load(QUrl("http://www.google.com/"))
sys.exit(app.exec_())
0

你可以把焦点设置在主框架上:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtWebKit import *


if __name__ == '__main__':
    app = QApplication(sys.argv)
    web = QWebView()
    frame = web.page().mainFrame()
    frame.setFocus()
    web.showFullScreen()
    web.load(QUrl("http://www.google.com"))
    sys.exit(app.exec_())

撰写回答