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
相关产品推荐
相关产品推荐

