python - 如何将列中的所有项目对齐到 QTableWidget 的中心

标签 python pyqt pyqt5 qtablewidget

我正在使用 PyQt5 和 PyCharm。如何将一列下的所有单元格居中对齐?下面的代码似乎有效,但仅适用于一个标题单元格。我应该更改或添加什么?

item3 = QtWidgets.QTableWidgetItem('Item Name')
item3.setTextAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignVCenter)
self.tableWidget.setHorizontalHeaderItem(2, item3)

最佳答案

建立列对齐的一种简单方法是通过委托(delegate):

import sys
from PyQt5 import QtCore, QtWidgets


class AlignDelegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super(AlignDelegate, self).initStyleOption(option, index)
        option.displayAlignment = QtCore.Qt.AlignCenter


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.tableWidget = QtWidgets.QTableWidget(15, 6)
        self.setCentralWidget(self.tableWidget)

        for i in range(self.tableWidget.rowCount()):
            for j in range(self.tableWidget.columnCount()):
                it = QtWidgets.QTableWidgetItem("{}-{}".format(i, j))
                self.tableWidget.setItem(i, j, it)

        delegate = AlignDelegate(self.tableWidget)
        self.tableWidget.setItemDelegateForColumn(2, delegate)

        # for all columns:
        # self.tableWidget.setItemDelegate(delegate)


if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

enter image description here

关于python - 如何将列中的所有项目对齐到 QTableWidget 的中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52644371/

相关文章:

python - 在python中查看pickle文件中的图像

python - 带有 CheckDelegate 项目的 ListView 在滚动时不保留选中的复选框

python - 在Raspberry上安装PyQt5 for Python3.6

python - CSV.writerow 每个字符之间有逗号?

python - 如果 __new__ 在没有参数的情况下调用,为什么 __init__ 不会被调用

python - 同步两个 QTreeWidgets

python - 改变标题栏的颜色

python - QTimeEdit 当分钟减少时如何减少到前一小时?

python - 匹配/索引字符串填充随机间隙

python - 为 python GUI 应用程序授予 root 权限以在 ubuntu 中运行命令