Как поменять стиль QTableWidget?
Подскажите, пожалуйста, как мне добиться такого же стиля таблицы, как на картинке.
Я не очень понимаю, как мне убрать рамку вокруг всего заголовка, а "border" из-за этой рамки изменяет разделение между номерами ячеек и увеличивает её толщину. Почему-то "setFrameShape(QFrame::NoFrame);" не даёт никакого результата. Также не очень понимаю, как мне убрать выступ заголовков на пару пикселей. Знаю, как сделать это при "border: none;", но в ином случае у меня не получается.
Буду в крайне степени благодарен, если кто-нибудь подскажет, как выравнять текст в ячейках заголовков по центру, потому что "text-align: center;" почему-то не работает и как убрать жирный шрифт в заголовках, который возникает при выделении ячейки.
Таблица, которая нужна:
Таблица, которая получилась у меня:
Мой код:
QTableWidget* tableWidget = new QTableWidget(12, 2, answer_table_widget); tableWidget->setFrameShape(QFrame::NoFrame); tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); tableWidget->setStyleSheet("QTableView { " " gridline-color: gray; " " gridline-width: 1px;" "}" "QTableWidget {" " border: none;" "}" "QTableCornerButton::section {" " background-color: rgb(231, 237, 248);" " border: 1px solid gray;" "}" "QTableWidget::item {" " font-size: 12pt Roboto;" " width: 100px;" " height: 20px;" " border: none;" "}" "QHeaderView::section {" " background-color: rgb(231, 237, 248);" " font-size: 12pt Roboto;" " text-align: center;" " border: 1px solid gray;" "}" "QHeaderView::section[orientation=horizontal] {" " height: 20px;" "}" "QHeaderView::section[orientation=vertical] {" " width: 20px;" "}"); tableWidget->horizontalHeader()->setFixedWidth(2 * 100 + 2); tableWidget->verticalHeader()->setFixedHeight(12 * 30 + 2); tableWidget->setFixedSize(tableWidget->horizontalHeader()->length() + tableWidget->verticalHeader()->width() + 8, tableWidget->verticalHeader()->length() + tableWidget->horizontalHeader()->width() + 4); tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); |
QTableWidget* tableWidget = new QTableWidget(12, 2, answer_table_widget); tableWidget->setFrameShape(QFrame::NoFrame); tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); tableWidget->setStyleSheet("QTableView { " " gridline-color: gray; " " gridline-width: 1px;" "}" "QTableWidget {" " border: none;" "}" "QTableCornerButton::section {" " background-color: rgb(231, 237, 248);" " border: 1px solid gray;" "}" "QTableWidget::item {" " font-size: 12pt Roboto;" " width: 100px;" " height: 20px;" " border: none;" "}" "QHeaderView::section {" " background-color: rgb(231, 237, 248);" " font-size: 12pt Roboto;" " text-align: center;" " border: 1px solid gray;" "}" "QHeaderView::section[orientation=horizontal] {" " height: 20px;" "}" "QHeaderView::section[orientation=vertical] {" " width: 20px;" "}"); tableWidget->horizontalHeader()->setFixedWidth(2 * 100 + 2); tableWidget->verticalHeader()->setFixedHeight(12 * 30 + 2); tableWidget->setFixedSize(tableWidget->horizontalHeader()->length() + tableWidget->verticalHeader()->width() + 8, tableWidget->verticalHeader()->length() + tableWidget->horizontalHeader()->width() + 4); tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
Код получился перегруженным, потому что много чего пробовал, но не всё убирал. Скорее всего, проблема в том, что я использую стили как-то неправильно, но в чём проблема понять не могу.
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для изменения стиля QTableWidget в PyQt можно воспользоваться каскадными таблицами стилей (CSS). Сначала необходимо создать файл стилей (например, styles.qss) и определить в нем необходимые стили для QTableWidget. Затем подключить этот файл стилей к вашему приложению.
Пример файла стилей styles.qss:
QTableWidget { background-color: #f0f0f0; /* устанавливаем цвет фона */ color: #333; /* цвет текста */ font-size: 12px; /* размер шрифта */ } QHeaderView::section { background-color: #d3d3d3; /* цвет фона заголовков */ color: #333; /* цвет текста заголовков */ font-size: 12px; /* размер шрифта заголовков */ }
Далее, в вашем коде Python необходимо подключить этот файл стилей:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem from PyQt5.QtCore import Qt class MyTable(QTableWidget): def __init__(self, rows, cols): super().__init__(rows, cols) self.setStyleSheet(open('styles.qss').read()) if __name__ == '__main__': app = QApplication(sys.argv) table = MyTable(4, 3) table.setHorizontalHeaderLabels(['Column 1', 'Column 2', 'Column 3']) for i in range(4): for j in range(3): item = QTableWidgetItem(f'Row {i+1}, Col {j+1}') table.setItem(i, j, item) table.show() sys.exit(app.exec_())
Теперь QTableWidget будет отображаться с заданным стилем. В данном примере установлены цвет фона, цвет текста и размер шрифта как для самой таблицы, так и для заголовков столбцов. Вы можете настроить стили согласно вашим потребностям, изменяя значения свойств в файле стилей.