【发布时间】:2021-09-24 13:26:36
【问题描述】:
我有以下代码来对齐 QTableWidget 列的文本。
import sys
from PyQt5 import QtWidgets, QtCore
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem, QStyledItemDelegate
class AlignRightDelegate(QStyledItemDelegate):
def initStyleOption(self, option, index):
super(AlignRightDelegate, self).initStyleOption(option, index)
option.displayAlignment = Qt.AlignRight
class Table(QTableWidget):
def __init__(self, data, alignColumns = 1, *args):
QTableWidget.__init__(self, *args)
self.setRowCount(len(data))
self.setColumnCount(3)
self.setData(data)
self.resizeColumnsToContents()
for colIndex in range(1, 1 + alignColumns):
print("Align Column [", colIndex, "]", sep="")
self.setItemDelegateForColumn(colIndex, AlignRightDelegate())
def setData(self, data):
horizontalHeaders = []
for m, rowContent in enumerate(data):
for n, cellContent in enumerate(data[m]):
if (m == 0):
horizontalHeaders.append(cellContent)
else:
self.setItem(m - 1, n, QTableWidgetItem(cellContent))
self.setHorizontalHeaderLabels(horizontalHeaders)
if __name__ == "__main__":
data = [["col1", "col2", "col3"],
[ "1", "1", "a"],
[ "-1", "2", "b"],
[ "0", "3", "c"]]
print("python QTableWidgetAlignRight.py[ <AlignColumnCount=1]")
app = QApplication(sys.argv)
table = Table(data, int(sys.argv[1])) if (len(sys.argv) > 1) else Table(data)
table.show()
sys.exit(app.exec_())
如果我使用python QTableWidgetAlignRight.py 1 执行上面的代码,它有点工作,它应该如下所示,col2 与右侧对齐但显然与也顶:
但是,当我使用 python QTableWidgetAlignRight.py 2 执行相同的代码时,我尝试将 2 列向右对齐,我遇到了 Python has stopped working error。以下截图其实是在我的日文Windows OS(Win 10 Pro 20H2 (OS Build 19402.1165))
但是我在网上搜索了相同的英文错误消息,我发现了一个屏幕截图,尽管不是由于我上面的代码(从这个页面挖掘:Python has stopped working)。
那么对齐我的 QTableWidget 的 2 列的正确方法是什么(没有错误并且没有垂直对齐到顶部)?这也是 PyQt5 中的一个错误吗?
为了您的信息,我正在使用以下内容:Python 3.7.6、conda 4.8.2、pyqt 5.9.2 py37h6538335_2。对于列对齐,我查看了这个以供参考:How to align all items in a column to center in QTableWidget
【问题讨论】: