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

时间:2017-12-25 19:00:25

标签: python pyqt alignment pyqt4 qtablewidget

我正在使用基于Qt4的PyQt。我的编辑器是PyCharm 2017.3,我的python版本是3.4。我正在从网站上抓一些文字。我试图将该文本与QTableWidget中的单元格中心对齐。

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

因此,在将项目放入单元格时,我尝试按照documentation对齐它。问题是数据没有显示出来。

a part of QtableWidget where data is not showing up

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

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

a part of my QtableWidget

2 个答案:

答案 0 :(得分:2)

这行代码:

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

将无法正常工作,因为它会在将项目分配给变量之前将其抛出。该变量实际上将设置为None,这是setTextAlignment()的返回值。相反,你必须这样做:

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

答案 1 :(得分:0)

这对我不起作用,我不确定是否是因为我使用的是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)

知道这是一个古老的问题,但希望它可以帮助其他人。