如何将文本对齐到 QTableWidget 中单元格的中心
How to align the text to center of cells in a QTableWidget
我正在使用基于 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)
这行代码:
item = QTableWidgetItem(scraped_age).setTextAlignment(Qt.AlignHCenter)
将无法正常工作,因为它会在将其分配给变量之前丢弃它创建的项目。该变量实际上将设置为 None
,这是 setTextAlignment()
的 return 值。相反,您必须这样做:
item = QTableWidgetItem(scraped_age) # create the item
item.setTextAlignment(Qt.AlignHCenter) # change the alignment
这对我不起作用,我不确定是因为我使用的是 PyQt5 还是我做错了什么。我试图找到类似的东西,但对于整个 table,我终于偶然发现了一些有用的东西,它可以让你一次将每个单元格或一列居中。
你必须使用委托方法:
#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
在您的代码中实现此后,您可以将以下内容添加到您的主要 window class 或定义 table 的任何地方:
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)
知道这是一个老问题,但希望它能帮助别人。
聚会有点晚了,但对于那些想知道如何在 pyqt5 上做到这一点的人来说
table = QTableWidgetItem() #QTWidgets.QTableWidgetItem() if importing QWidget from PyQt5
table.setTextAlignment(number)
setTextAlignment 采用 int 作为参数(对齐)。输入数字得到结果:
0:左
1:left
2:right
3:right
4:centre
我正在使用基于 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)
这行代码:
item = QTableWidgetItem(scraped_age).setTextAlignment(Qt.AlignHCenter)
将无法正常工作,因为它会在将其分配给变量之前丢弃它创建的项目。该变量实际上将设置为 None
,这是 setTextAlignment()
的 return 值。相反,您必须这样做:
item = QTableWidgetItem(scraped_age) # create the item
item.setTextAlignment(Qt.AlignHCenter) # change the alignment
这对我不起作用,我不确定是因为我使用的是 PyQt5 还是我做错了什么。我试图找到类似的东西,但对于整个 table,我终于偶然发现了一些有用的东西,它可以让你一次将每个单元格或一列居中。
你必须使用委托方法:
#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
在您的代码中实现此后,您可以将以下内容添加到您的主要 window class 或定义 table 的任何地方:
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)
知道这是一个老问题,但希望它能帮助别人。
聚会有点晚了,但对于那些想知道如何在 pyqt5 上做到这一点的人来说
table = QTableWidgetItem() #QTWidgets.QTableWidgetItem() if importing QWidget from PyQt5
table.setTextAlignment(number)
setTextAlignment 采用 int 作为参数(对齐)。输入数字得到结果:
0:左 1:left 2:right 3:right 4:centre