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

roy*_*rek 2 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)
Run Code Online (Sandbox Code Playgroud)

因此,在将项目放入单元格时,我正在尝试根据文档进行对齐。问题是没有显示数据。

QtableWidget的一部分,其中没有显示数据

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

item = QTableWidgetItem(scraped_age)
self.tableWidget.setItem(x, 2,item)
Run Code Online (Sandbox Code Playgroud)

我的QtableWidget的一部分

小智 11

这对我不起作用,我不确定是因为我使用的是 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
Run Code Online (Sandbox Code Playgroud)

在代码中实现此功能后,您可以将以下内容添加到主窗口类或定义表的任何位置:

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)
Run Code Online (Sandbox Code Playgroud)

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

  • 当使用 AbstractTable 模型时,这种委托机制是一种更好的解决方案。 (3认同)

ekh*_*oro 5

这行代码:

item = QTableWidgetItem(scraped_age).setTextAlignment(Qt.AlignHCenter)
Run Code Online (Sandbox Code Playgroud)

将无法正常工作,因为它将在分配给变量之前丢弃它创建的项目。实际上,该变量将设置为None,这是的返回值setTextAlignment()。相反,您必须执行以下操作:

item = QTableWidgetItem(scraped_age) # create the item
item.setTextAlignment(Qt.AlignHCenter) # change the alignment
Run Code Online (Sandbox Code Playgroud)

  • `Qt.AlignHCenter` 将在单元格顶部水平居中,`Qt.AlignCenter` 将在单元格中心(水平和垂直)居中。 (2认同)