Удалить горизонтальные линии сетки из QTableWidget в PyQt - PullRequest
2 голосов
/ 07 января 2020

Я гуглял по этой проблеме и читал документацию по qt, но все ответы, которые я могу найти, написаны для Qt для C ++

Я пытаюсь понять, как удалить все горизонтальные линии сетки из QTableWidget, подобного приведенному здесь

QTableWidget

, чтобы таблица выглядела как список со строками и столбцами

Я пытался использовать таблицы стилей для изменения внешнего вида виджет, но, похоже, он не влияет на внешний вид стола

1 Ответ

2 голосов
/ 08 января 2020

Я не думаю, что есть встроенный метод, однако вы можете удалить горизонтальные линии сетки с помощью таблиц стилей, отключив линии сетки с помощью setShowGrid(False), а затем рисуя границы вертикальных линий с помощью селектора QTableView::item и стиля border-right, например: это:

tableWidget.setShowGrid(False)
tableWidget.setStyleSheet('QTableView::item {border-right: 1px solid #d6d9dc;}')

enter image description here

Вот краткий пример

from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QVBoxLayout
import sys

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(0, 0, 300, 200)
        self.create_table()
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.tableWidget) 
        self.setLayout(self.layout) 
        self.show()

    def create_table(self):
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(4)
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setItem(0,0, QTableWidgetItem("Cell (1,1)"))
        self.tableWidget.setItem(0,1, QTableWidgetItem("Cell (1,2)"))
        self.tableWidget.setItem(1,0, QTableWidgetItem("Cell (2,1)"))
        self.tableWidget.setItem(1,1, QTableWidgetItem("Cell (2,2)"))
        self.tableWidget.setItem(2,0, QTableWidgetItem("Cell (3,1)"))
        self.tableWidget.setItem(2,1, QTableWidgetItem("Cell (3,2)"))
        self.tableWidget.setItem(3,0, QTableWidgetItem("Cell (4,1)"))
        self.tableWidget.setItem(3,1, QTableWidgetItem("Cell (4,2)"))
        self.tableWidget.move(0,0)

        # Remove horizontal gridlines
        self.tableWidget.setShowGrid(False)
        self.tableWidget.setStyleSheet('QTableView::item {border-right: 1px solid #d6d9dc;}')

if __name__ == '__main__':
    app = QApplication(sys.argv)
    table = Table()
    sys.exit(app.exec_())  

Примечание: Если вы хотели чтобы удалить вертикальные линии сетки, измените стиль с border-right на border-bottom

enter image description here

...