私は自分の "仮想キーボード"を持っています。私は既にKeyEventsにクリックされたボタンを変換してQTextEditなどに渡す必要があります。私の問題は、QWebEngineView内の書き込み可能な領域で同じことをしたいということです。QWebEngineView、ビュー内にKeyEventsを投稿
たとえば、キーボードを使用してQLineEditを編集し、ウェブサイトをリクエストします。 DONE
Googleがリクエストしたとします。今私は私の前にGoogleのウェブサイトを持っています。 。私は私のQWebEngineView内部にあるボックス(検索ボックスのITへの私のキーボードからのキーイベントを送信する必要が
のは、今いくつかのポイント指してみましょう:私は私のようPyQt5
- を「APIは、それは親がcorect場所へのKeyEventを消費する必要がありますことを私に言って、読みまし。here
- このスニペットが言う 『...それはQtWebKitで可能だったように。』
- QtWebKitがなくなったので、代わりにChromiumが表示されています。これは、例えば、私のQEditTextと何にキーイベントをシミュレートするために私が持っているものである
...(たぶんそれは私がこれらのイベントを投稿する届かない理由です)
from PyQt5.QtCore import QCoreApplication
from PyQt5.QtCore import QEvent
from PyQt5.QtCore import QSize
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QIcon
from PyQt5.QtGui import QKeyEvent
from PyQt5.QtGui import QPixmap
from PyQt5.QtWidgets import QPushButton
class KeyboardKey(QPushButton):
__path = ""
__size = [30, 30]
__style = ""
__icon_on = ""
__icon_off = ""
__auto_repeat = True
__receiver = None
__key = None
__str_key = None
def __init__(self, style, str_icon_on, str_icon_off, auto_repeat, size, receiver, key, str_key):
super(KeyboardKey, self).__init__()
self.__size = size
self.__style = style
self.__icon_on = str_icon_on
self.__icon_off = str_icon_off
self.__auto_repeat = auto_repeat
self.__receiver = receiver
self.__key = key
self.__str_key = str_key
self.set_up_button(style, str_icon_on, str_icon_off, auto_repeat, size, receiver, key, str_key)
def set_up_button(self, style, str_icon_on, str_icon_off, auto_repeat, size, receiver, key, str_key):
self.__size = size
self.__style = style
self.__icon_on = str_icon_on
self.__icon_off = str_icon_off
self.__auto_repeat = auto_repeat
self.__receiver = receiver
self.__key = key
self.__str_key = str_key
self.setText(str_key)
self.setFixedSize(size[0], size[1])
self.setStyleSheet(style)
self.setIconSize(QSize(size[0], size[1]))
self.setIcon(QIcon(self.__path + str_icon_off + ".png"))
self.setAutoRepeat(auto_repeat)
pixmap = QPixmap(self.__path + str_icon_off + ".png")
self.setMask(pixmap.mask())
self.pressed.connect(self.key_pressed)
self.released.connect(self.key_released)
def set_receiver(self, receiver):
self.__receiver = receiver
def key_pressed(self):
self.setStyleSheet("""
border-width: 5px;
border-color: rgb(37,43,52);
color: white;
background-color: rgb(0,187,255);
""",)
def key_released(self):
event = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier,
"a", False)
# self.__receiver is my QEditText/QLineEdit/...
self.__receiver.keyPressEvent(event)
この最後の部分は私が自分のイベントを "self .__ receiver"に投稿する部分です。この受信機は、常にそれを呼び出す「QWidget」のために設定されます。
私はちょうど何か言うことを試みている:あなたの代わりにQWebEngineViews focusProxyにイベントを送信するときにこれは動作するはず
def key_released(self):
event = QKeyEvent(QEvent.KeyPress, Qt.Key_A, Qt.NoModifier,
"a", False)
# web_view is my QWebEngineView... but it won't consume. Or maybe it's not consuming to the right place.
self.web_view.keyPressEvent(event)
Mannnnnnを、I場合100万ドルを持っていた、私は今あなたにそれを与えるだろう!イエス・キリスト、私はそれを理解しようと私の脳をどのくらい壊したか分かりません。試してみたら、そんなに簡単なことじゃない!完璧に!この "QCoreApplication.postEvent(self .__ receiver、event)"のために、この行 "self.web_view.keyPressEvent(event)"を変更しなければなりませんでした。 – yurisnm
KeyPressEventを通じて、私は保護されたメソッドにアクセスすることができません。以前と同じようにQCoreApplication.postEventをポストしなければなりませんでした。 :D – yurisnm