如何将文本对齐到QTableWidget单元格的中心

14

我正在使用基于Qt4的PyQt。我的编辑器是PyCharm 2017.3,我的Python版本是3.4。我正在从一个网站爬取一些文本。我正在尝试将该文本对齐到QTableWidget单元格的中心。

item = QTableWidgetItem(scraped_age).setTextAlignment(Qt.AlignHCenter)
self.tableWidget.setItem(x, 2,item)
因此,在将项目放入单元格时,我试图按照文档所示进行对齐documentation。问题是数据没有显示出来。

未显示数据的 QtableWidget 的一部分

当我删除了 setTextAlignment 方法时,它确实显示了,如下所示

item = QTableWidgetItem(scraped_age)
self.tableWidget.setItem(x, 2,item)

我的QtableWidget的部分

4个回答

25

这行代码:

item = QTableWidgetItem(scraped_age).setTextAlignment(Qt.AlignHCenter)

这样做是不正确的,因为它在将创建的项目分配给变量之前就被丢弃了。实际上,变量将被设置为None,即setTextAlignment()的返回值。相反,你必须这样做:

item = QTableWidgetItem(scraped_age) # create the item
item.setTextAlignment(Qt.AlignHCenter) # change the alignment

2
Qt.AlignHCenter 将水平居中对齐到单元格顶部,Qt.AlignCenter 将在单元格中心进行水平和垂直居中对齐。 - NZD

10

这对我没有用,我不确定是因为我使用的是PyQt5还是我做错了什么。我一直在尝试寻找类似的东西但是适用于整个表格,最后我偶然发现了一个可以让你居中每个单元格或者只是一列的东西。

你必须使用代理方法:

#You're probably importing QtWidgets to work with the table
#but you'll also need QtCore for the delegate class
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

在您的代码中实现此功能后,您可以将以下内容添加到您的主窗口类或定义表格的任何位置:
delegate = AlignDelegate(self.tableWidget)
self.tableWidget.setItemDelegateForColumn(2, delegate) #You can repeat this line or
                                                       #use a simple iteration / loop
                                                       #to align multiple columns

 #If you want to do it for all columns:
 #self.tableWidget.setItemDelegate(delegate)

我知道这是一个老问题,但希望它能帮助其他人。


3
当使用AbstractTable模型时,这种委托机制是一种更好的解决方案。 - David

1

有些晚了,但如果你想知道如何在pyqt5上实现这个功能

table = QTableWidgetItem() #QTWidgets.QTableWidgetItem() if importing QWidget from PyQt5

table.setTextAlignment(number)

setTextAlignment方法需要传入一个整数类型的参数(alignment)。将对应数字传入即可得到相应的结果:

0:左对齐 1:左对齐 2:右对齐 3:右对齐 4:居中


0
如果不使用委托,而且不想为每个新创建的 QTableWidgetItem 设置对齐方式,那么可以在表格小部件中像这样设置原型项目
protoItem = QTableWidgetItem()
protoItem.setTextAlignment(Qt.AlignCenter)
# set other things like read-only with QTableWidgetItem.setFlags, etc.

# set prototype item for all items created from now
myTableWidget.setItemPrototype(protoItem)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接