Измените размер точки в последних строках QTableWidget

#python #pyqt5

Вопрос:

У меня есть таблица с некоторыми строками, имеющими шрифт размера точки по умолчанию. Я хотел бы изменить размер точки только в последней строке.

Все, что я нашел в Интернете, изменило размер всей таблицы или я получил ошибку, что «cell = QTableWidgetItem» не поддерживает изменение шрифтов

Мой фрагмент кода

 def fill_Turni(self, table: QTableWidget, year, month, editable=False):
    table.setRowCount(0)
    daysinmonth = calendar.monthrange(int(year), int(month))[1]
    fake_row = 0
    table.insertRow(fake_row)
    table.setRowHeight(fake_row, 20)
    i = 1
    while i <= daysinmonth:
        a_date = datetime.date(int(year), int(month), i)
        a_dow = a_date.strftime("%a")
        dow = a_dow[0:3]
        dow = dow.lower()
        cell = QTableWidgetItem(str(dow))
        table.setItem(fake_row, i, cell)
        i  = 1

    for i in range (7):
        fake_row = fake_row   1
        table.insertRow(fake_row)
        table.setRowHeight(fake_row, 20)
        text = Functions.shift_table[i]
        cell = QTableWidgetItem(text)
        cell.setTextAlignment(Qt.AlignCenter)
        table.setItem(fake_row, 0, cell)
    i = 1
    conn = mysql.connector.connect(user='a', password='b', database='c')
    cursor = conn.cursor(buffered=True, dictionary=True)
    value = {}
    while i <= daysinmonth:
        query = "SELECT * FROM damntable WHERE year = '%s' AND month = '%s' AND day = '%s' " %(year, month, i)
        cursor.execute(query)
        results = cursor.fetchall()
        self.numrows = int(cursor.rowcount)
        for row, data in enumerate(results):
            value[0] = data['morn']
            value[1] = data['noon']
            value[2] = data['even']
            value[3] = data['req']
            value[4] = data['req_m']
            value[5] = data['req_p']
            value[6] = value[3]   value[4]   value[5]
            fake_row = 0
            for zz in range (7):
                fake_row = fake_row   1
                z_value = value[zz]
                if z_value == 0:
                    z_value =''
                cell = QTableWidgetItem(str(z_value))
                cell.setTextAlignment(Qt.AlignCenter)
                table.setItem(fake_row, i, cell)
        i = i   1
 

Ответ №1:

Если вы хотите изменить шрифт QTableWidgetItem, вы должны использовать метод setFont() :

 font = cell.font()
font.setPointSize(20)
cell.setFont(font)
 

Но если вы хотите, чтобы это было что-то динамичное, вы должны использовать делегата:

 LAST_POINT_SIZE = 20


class Delegate(QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super().initStyleOption(option, index)
        if index.row() == index.model().rowCount() - 1:
            font = QFont(option.font)
            font.setPointSize(LAST_POINT_SIZE)
            option.font = font
            option.fontMetrics = QFontMetrics(font)

    def createEditor(self, parent, option, index):
        editor = super().createEditor(parent, option, index)
        if index.row() == index.model().rowCount() - 1:
            font = QFont(option.font)
            font.setPointSize(LAST_POINT_SIZE)
            editor.setFont(font)
        return editor
 
 delegate = Delegate(table)
table.setItemDelegate(delegate)
 

Комментарии:

1. Первый вариант не имеет эффекта, делегато работает правильно