【问题标题】:How to align the text to center of cells in a QTableWidget如何将文本与 QTableWidget 中的单元格中心对齐
【发布时间】:2023-03-09 00:52:02
【问题描述】:

我正在使用基于 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)

【问题讨论】:

    标签: python pyqt alignment pyqt4 qtablewidget


    【解决方案1】:

    这行代码:

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

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

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

    【讨论】:

    • Qt.AlignHCenter 将在单元格顶部水平居中,Qt.AlignCenter 将居中于单元格的中心(水平和垂直)。
    【解决方案2】:

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

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

    【讨论】:

    • 当使用 AbstractTable 模型时,这种委托机制是一种更好的解决方案。
    【解决方案3】:

    聚会有点晚了,但是对于那些想知道如何在 pyqt5 上做到这一点的人来说

    table = QTableWidgetItem() #QTWidgets.QTableWidgetItem() if importing QWidget from PyQt5
    
    table.setTextAlignment(number)
    

    setTextAlignment 采用 int 作为参数(对齐)。输入数字得到结果:

    0:左 1:左 2:对 3:对 4:中心

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      • 2017-08-13
      相关资源
      最近更新 更多