You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QComboBox阿拉伯语与英语混合文本显示顺序异常问题

问题根因

该现象并非QComboBox的组件bug,是Unicode双向文本(BiDi)默认排版规则导致的正常表现:当文本同时包含RTL类字符(阿拉伯语等)和LTR类字符(英语等)时,Qt会遵循Unicode双向算法自动调整字符段的显示顺序,最终呈现的顺序会和输入顺序不一致。

解决方案

只需要在将文本添加到QComboBox前,给文本开头拼接右向嵌入控制符 \u202b,即可强制整段文本按照RTL方向渲染,完全保留原始输入的文本顺序,仅需修改do_something方法逻辑即可:

def do_something(self):
    # 拼接\u202b控制符强制RTL渲染顺序
    self.combo_box.addItem(f"\u202b{self.text.text()}")
完整可运行代码
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys

class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Python ")
        self.setGeometry(100, 100, 600, 400)
        self.setLayoutDirection(Qt.RightToLeft)
        self.UiComponents()
        self.show()

    def UiComponents(self):
        self.combo_box = QComboBox(self)
        self.combo_box.setGeometry(200, 150, 200, 30)
        self.combo_box.setStyleSheet("QComboBox { combobox-popup: 0; }")
        self.combo_box.setMaxVisibleItems(7)

        self.text = QLineEdit(self)
        self.text.setGeometry(200,200,150,30)
        self.push = QPushButton(self)
        self.push.setText("ADD")
        self.push.setGeometry(200,250,150,30)
        self.push.clicked.connect(self.do_something)

    def do_something(self):
        self.combo_box.addItem(f"\u202b{self.text.text()}")

App = QApplication(sys.argv)
App.setStyle("FUSION")
window = Window()
sys.exit(App.exec())
问题效果参考

问题效果展示

内容的提问来源于stack exchange,提问作者Abdo Joker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:24:02