我正在使用基于Qt4的PyQt。我的编辑器是PyCharm 2017.3,我的python版本是3.4。我正在从网站上抓一些文字。我试图将该文本与QTableWidget中的单元格中心对齐。
item = QTableWidgetItem(scraped_age).setTextAlignment(Qt.AlignHCenter)
self.tableWidget.setItem(x, 2,item)
因此,在将项目放入单元格时,我尝试按照documentation对齐它。问题是数据没有显示出来。
当我删除了setTextAlignment方法时,它确实显示了如下所示
item = QTableWidgetItem(scraped_age)
self.tableWidget.setItem(x, 2,item)
答案 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)
知道这是一个古老的问题,但希望它可以帮助其他人。