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

新手上路,请多包涵

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

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

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

数据未显示的 QtableWidget 的一部分

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

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

我的 QtableWidget 的一部分

原文由 royatirek 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 945
2 个回答

这行代码:

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

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

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

原文由 ekhumoro 发布,翻译遵循 CC BY-SA 3.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)

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

原文由 DidicoVoador 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题