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

如何为QTableWidget的每列设置单独的布局方向?

解决QTableWidget混合RTL/LTR语言的布局问题

问题背景

我有一个包含阿拉伯语(RTL,从右到左)和英语(LTR,从左到右)混合语言列的QTableWidget。使用setLayoutDirection()会修改整个表格的布局方向,导致以下问题:

  • 设置为RTL时:阿拉伯语显示正常,但英语文本反转(如"(Such is Our) Way"变成"Way (Such is Our)"),表格位于屏幕右侧
  • 设置为LTR时:英语显示正常,但阿拉伯语文本反转,表格位于屏幕左侧

需求:表格保持在屏幕右侧,列顺序不变,同时阿拉伯语和英语文本均显示正确。

解决方案

实现思路

  • 表格整体设置为Qt.RightToLeft,保证表格在屏幕右侧,列顺序符合预期
  • 针对英语列的单元格,单独设置文本的布局方向为Qt.LeftToRight,避免文本反转

修改后的可运行代码

import sys
from PySide6.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem
from PySide6.QtCore import Qt


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()

        table = QTableWidget(2, 2)
        table.setHorizontalHeaderLabels(["Arabic", "English"])
        # 表格整体设为RTL,确保在屏幕右侧显示,列顺序不反转
        table.setLayoutDirection(Qt.RightToLeft)

        # 阿拉伯语列(第0列),使用默认RTL方向渲染
        table.setItem(0, 0, QTableWidgetItem("(الكلمة الأولى) خلية 1"))
        table.setItem(1, 0, QTableWidgetItem("(الكلمة الثانية) خلية 2"))

        # 英语列(第1列),为每个单元格单独设置LTR方向
        eng_item1 = QTableWidgetItem("(First word) cell 1")
        eng_item1.setLayoutDirection(Qt.LeftToRight)
        eng_item1.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter)
        table.setItem(0, 1, eng_item1)

        eng_item2 = QTableWidgetItem("(Second word) cell 2")
        eng_item2.setLayoutDirection(Qt.LeftToRight)
        eng_item2.setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter)
        table.setItem(1, 1, eng_item2)

        self.setCentralWidget(table)
        self.setWindowTitle("QTableWidget Mixed Language Fix")
        self.resize(400, 300)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

关键说明

  • table.setLayoutDirection(Qt.RightToLeft):控制表格整体布局为RTL,保持在屏幕右侧,列的显示顺序不会被反转
  • 对英语列的QTableWidgetItem调用setLayoutDirection(Qt.LeftToRight):强制该单元格内的文本按LTR规则渲染,避免英语内容反转
  • setTextAlignment(Qt.AlignLeft | Qt.AlignVCenter):让英语文本在单元格内左对齐,符合LTR语言的阅读习惯

内容的提问来源于stack exchange,提问作者Alaa M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 09:24:58