如何在麒麟系统上解决PyQt6应用中的输入法显示无输入窗口?

新手上路,请多包涵

import sys
import os
from PyQt6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QLineEdit, QPushButton, QWidget
from PyQt6.QtWebEngineWidgets import QWebEngineView
from PyQt6.QtGui import QIcon
from PyQt6.QtCore import QUrl

if sys.platform.startswith('kylin'):

os.environ["QT_IM_MODULE"] = "fcitx"
os.environ["XMODIFIERS"] = "@im=fcitx"
os.environ["GTK_IM_MODULE"] = "fcitx"

class Browser(QMainWindow):

def __init__(self):
    super().__init__()

    self.setWindowTitle('PyQt6 Browser')
    self.setGeometry(100, 100, 1200, 800)

    # 创建中央部件
    central_widget = QWidget()
    self.setCentralWidget(central_widget)

    # 创建布局
    layout = QVBoxLayout(central_widget)

    # 创建地址栏
    self.urlbar = QLineEdit()
    layout.addWidget(self.urlbar)

    # 创建加载按钮
    self.load_button = QPushButton('Load')
    self.load_button.clicked.connect(self.load_url)
    layout.addWidget(self.load_button)

    # 创建浏览器视图
    self.browser = QWebEngineView()
    layout.addWidget(self.browser)

    # 设置默认页面
    self.browser.setUrl(QUrl("http://www.example.com"))

def load_url(self):
    url = QUrl(self.urlbar.text())
    if not url.scheme():
        url.setScheme('http')
    self.browser.setUrl(url)

if name == '__main__':

app = QApplication(sys.argv)
window = Browser()
window.show()
sys.exit(app.exec())

python3的版本是3.8.2,默认还有一个python 是2.7.18rc1
这个是写的测试的代码,应用在麒麟系统上运行,运行程序,在输入框的时候,输入法的状态显示无输入窗口, 判断系统是kylin那段也是后面查了才加上去的,也不行
系统是麒麟V10,输入法框架是fcitx,输入法在系统其他应用上可以使用,在bashrc上除了GTK_IM_MODULE,其他两个都配置了,/etc/profile上也一样
脚本启动增加 export 后用python3 还是不能读取到输入法
求教下高手怎么解决

阅读 532
avatarAI BotBETA

尝试以下解决方案:

  1. 强制指定Qt插件路径(在应用启动前设置):

    export QT_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins
    export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts
  2. 安装fcitx前端组件:

    sudo apt-get install fcitx-frontend-qt5 fcitx-frontend-qt6
  3. 修改启动脚本为:

    #!/bin/bash
    export QT_IM_MODULE=fcitx
    export XMODIFIERS=@im=fcitx
    export GTK_IM_MODULE=fcitx
    export QT_QPA_PLATFORM=xcb  # 强制使用X11
    python3 your_script.py
  4. 在代码中添加Qt插件验证:

    if __name__ == '__main__':
     app = QApplication(sys.argv)
     print("Available input methods:", app.inputMethod().possibleInputMethods())  # 调试输出
     window = Browser()
     window.show()
     sys.exit(app.exec())
  5. 检查插件文件是否存在:

    ls /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/libfcitx*

如果返回"No such file",需要重装fcitx-qt5和fcitx-qt6模块

  1. 终极方案(在代码中硬加载插件):

    from PyQt6.QtCore import QLibraryInfo
    import ctypes
    
    # 在应用启动前加载fcitx插件
    ctypes.CDLL("libfcitxplatforminputcontextplugin.so", mode=ctypes.RTLD_GLOBAL)
    os.environ["QT_IM_MODULE"] = "fcitx"

注意:路径可能需要根据实际安装位置调整,建议配合strace调试:

strace -e openat -f python3 your_script.py 2>&1 | grep fcitx
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题