PyQT(также привязка C++ QT) встроенный терминал urxvt теряет фокус
У меня проблема с встраиванием терминала urxvt в приложение QT. Ниже приведен пример упрощенного кода. Когда я создаю окно QT и встраиваю терминал urxvt внутрь (используя параметр -embed), у меня возникает проблема с фокусом. Когда окно создано, первый щелчок в окне делает фокус на встроенном терминале -> все в порядке, но когда я нажимаю на окно во второй раз, терминал, кажется, теряет фокус, хотя нормальный ввод с клавиатуры и мыши все еще работает. Но сам терминал вроде бы думает, у него нет фокуса. Кажется, что события все еще отправляются в окно встраивания, хотя оно не имеет фокуса. Та же проблема возникает при использовании привязок C++ QT.
Это хорошо видно при добавлении настроек в.Xdefaults(и при запуске необходимого xrdb -load .Xdefaults): URxvt*fading: -40
Вот упрощенный пример:
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class embterminal(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setGeometry(1,1,600,400)
self.process = QProcess(self)
self.terminal = QX11EmbedContainer(self)
layout = QVBoxLayout(self)
layout.addWidget(self.terminal)
self.terminal.showMaximized();
self.process.start('urxvt',['-embed', str(self.terminal.winId())])
if __name__ == "__main__":
app = QApplication(sys.argv)
main = embterminal()
main.show()
sys.exit(app.exec_())`
1 ответ
Из документов для QX11EmbedContainer:
QX11EmbedContainer может встраивать виджеты XEmbed из наборов инструментов, отличных от Qt, таких как GTK+. Произвольные (не XEmbed) виджеты X11 также могут быть встроены, но специфичные для XEmbed функции, такие как активация окна и обработка фокуса, теряются.
Поэтому, возможно, urxvt (или ваша версия) не поддерживает все необходимые функции протокола XEmbed.
Поиск в сети нашел этот комментарий:
urxvt-embed почти работает. Он утверждает, что поддерживает его и все, но не отправляет XEMBED_REQUEST_FOCUS, когда вы нажимаете на него. Это означает, что нет способа вернуть фокус после того, как он потерян.