PyQt Web Browser: фокус на веб-странице без щелчка мышью - PullRequest
1 голос
/ 29 июня 2011

Я пишу приложение для встроенного устройства, которое не имеет ввода мыши. Веб-браузер очень простой и не имеет кнопок, адресной строки, файловой панели и т. Д. На данный момент он просто загружает веб-страницу. Эта веб-страница использует 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 голосов
/ 29 июня 2011

Вы можете установить фокус на основной кадр:

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_())
0 голосов
/ 29 июня 2011

Я попробовал ваш код на своем ноутбуке, и QWebView уже был в фокусе - как только Google загрузился, я смог набрать текст, и мой текст появился в текстовом поле.

Если это проблема фокуса, то, поскольку QWebView наследует QWidget, вы можете вызвать его метод setFocus () . Вот ваш код с дополнительной строкой, вызывающей метод setFocus в QWebView после загрузки страницы:

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_())
...