Как поменять стиль QTableWidget?

Ссылка скопирована
C# Qt
1 ответ

Подскажите, пожалуйста, как мне добиться такого же стиля таблицы, как на картинке.
Я не очень понимаю, как мне убрать рамку вокруг всего заголовка, а "border" из-за этой рамки изменяет разделение между номерами ячеек и увеличивает её толщину. Почему-то "setFrameShape(QFrame::NoFrame);" не даёт никакого результата. Также не очень понимаю, как мне убрать выступ заголовков на пару пикселей. Знаю, как сделать это при "border: none;", но в ином случае у меня не получается.
Буду в крайне степени благодарен, если кто-нибудь подскажет, как выравнять текст в ячейках заголовков по центру, потому что "text-align: center;" почему-то не работает и как убрать жирный шрифт в заголовках, который возникает при выделении ячейки.
Таблица, которая нужна:

Как поменять стиль QTableWidget?

Таблица, которая получилась у меня:

Как поменять стиль QTableWidget?

Мой код:

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);

Код получился перегруженным, потому что много чего пробовал, но не всё убирал. Скорее всего, проблема в том, что я использую стили как-то неправильно, но в чём проблема понять не могу.

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Антон С. Ответ

Для изменения стиля 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; /* размер шрифта заголовков */
}

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_())

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 будет отображаться с заданным стилем. В данном примере установлены цвет фона, цвет текста и размер шрифта как для самой таблицы, так и для заголовков столбцов. Вы можете настроить стили согласно вашим потребностям, изменяя значения свойств в файле стилей.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно