#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. Первый вариант не имеет эффекта, делегато работает правильно