How to align the text to center of cells in a QTableWidget

后端 未结 2 1405
慢半拍i
慢半拍i 2020-12-04 02:22

I am using PyQt based on Qt4. My Editor is PyCharm 2017.3 and my python version is 3.4. I am scraping some text from a website. I am trying to align that text to the center

相关标签:
2条回答
  • 2020-12-04 02:37

    This line of code:

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

    will not work properly, because it throws away the item it creates before assigning it to the variable. The variable will in fact be set to None, which is the return value of setTextAlignment(). Instead, you must do this:

    item = QTableWidgetItem(scraped_age) # create the item
    item.setTextAlignment(Qt.AlignHCenter) # change the alignment
    
    0 讨论(0)
  • 2020-12-04 02:54

    This didn't work for me, and I'm not sure if it is because I'm using PyQt5 or it i did something wrong. I was trying to find something similar but for the whole table, and i finally stumbled upon something that worked and lets you center every cells or just one column at a time.

    You have to use the delegate method:

    #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
    

    After implementing this in your code, you can add the following to your main window class or wherever the table is defined:

    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)
    

    Know this is an old question, but hope it can help someone else.

    0 讨论(0)
提交回复
热议问题