python - 单元格编辑期间 QTableWidgetItem 中的居中文本

标签 python pyqt pyqt4 qtablewidget

以下 PyQt4 示例演示了我的问题。 QTableWidget 单元格中的文本很好地居中,直到您编辑单元格。当您编辑单元格时,文本左对齐。

我想在每个单元格的编辑过程中保持居中对齐。

import sys
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4 import Qt
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class MainWindow(QtGui.QWidget):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.table = QtGui.QTableWidget(parent=self)
        self.table.setEditTriggers(QtGui.QAbstractItemView.AllEditTriggers)
        self.table.setColumnCount(2)
        self.table.setRowCount(2)
        self.table.setHorizontalHeaderLabels(['col1','col2'])
        self.table.setVerticalHeaderLabels(['row1','row2'])

        item = QtGui.QTableWidgetItem('x')
        item.setFlags(Qt.NoItemFlags | Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable)
        item.setTextAlignment(Qt.AlignHCenter|Qt.AlignVCenter|Qt.AlignCenter)
        self.table.setItem(0, 0, item)

        item = QtGui.QTableWidgetItem('x')
        item.setFlags(Qt.NoItemFlags | Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable)
        item.setTextAlignment(Qt.AlignHCenter|Qt.AlignVCenter|Qt.AlignCenter)
        self.table.setItem(0, 1, item)

        item = QtGui.QTableWidgetItem('x')
        item.setFlags(Qt.NoItemFlags | Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable)
        item.setTextAlignment(Qt.AlignHCenter|Qt.AlignVCenter|Qt.AlignCenter)
        self.table.setItem(1, 0, item)

        item = QtGui.QTableWidgetItem('x')
        item.setFlags(Qt.NoItemFlags | Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable)
        item.setTextAlignment(Qt.AlignHCenter|Qt.AlignVCenter|Qt.AlignCenter)
        self.table.setItem(1, 1, item)

        layout = QtGui.QGridLayout()
        layout.addWidget(self.table, 1, 0)
        self.setLayout(layout)

################################################################

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    app.setStyle("Plastique")   # set style
    myapp = MainWindow()      # instantiate the main window
    myapp.show()              # show the main window
    rc = app.exec_()
    myapp.close()
    sys.exit(rc)   # exit with the same return code of Qt application      

最佳答案

一个可能的解决方案是实现一个委托(delegate):

class CenterDelegate(QStyledItemDelegate):
    def createEditor(self, parent, option, index):
        editor = QStyledItemDelegate.createEditor(self, parent, option, index)
        editor.setAlignment(Qt.AlignCenter)
        return editor

然后将它设置为 QTableWidget:

self.table = QtGui.QTableWidget(parent=self)
delegate = CenterDelegate()
self.table.setItemDelegate(delegate)

enter image description here

关于python - 单元格编辑期间 QTableWidgetItem 中的居中文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48997764/

相关文章:

python - 使用 cairo 在 Python 中绘制大量圆圈

python - 在 PySide2 中设置垂直和水平对齐方式

python - PyQt - 如何打开/关闭拼写检查

python - 如何在 pyqt 中的模型中设置组合框数据

PyQT删除程序标题栏?

python - 如何让PyQT4窗口跳到最前面?

python - socket编程时如何区分tcp/udp

python - 如何不在 .pypirc 中存储密码?

javascript - 是否可以从我的本地机器获取值到我的表单输入标签?

python - PyQt 更新 QTableWidget 中的某个单元格