Как настроить строки в QTableWidget - PullRequest
0 голосов
/ 12 октября 2019

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

Вот как должна выглядеть таблица:

enter image description here

Мой текущий код - просто обычный QTableWidget с некоторыми данными макета в нем

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import (QMainWindow, QApplication, QWidget, QAction, 
         QTableWidget,QTableWidgetItem,QVBoxLayout, QAbstractItemView)
from PyQt5.QtGui import QPainter, QColor, QFont, QBrush


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(50, 50, 700, 500))

        font = QtGui.QFont()
        font.setPointSize(15)


        self.tableWidget.setFocusPolicy(QtCore.Qt.NoFocus)
        self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)
        self.tableWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.tableWidget.verticalHeader().setVisible(False)
        self.tableWidget.horizontalHeader().setVisible(False)
        self.tableWidget.setShowGrid(False)

        self.tableWidget.setStyleSheet("background-color: black; selection-background-color: #353535; border-radius: 10px")
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setRowCount(0)

        data = [["Login", "Routine", "03/05/2019", "IP Address", "Yes"], ["Login", "Routine", "03/05/2019", "IP Address", "Yes"], ["Login", "Routine", "03/05/2019", "IP Address", "Yes"]]

        j=0
        for row in data:

            self.tableWidget.insertRow(j)
            j += 1
            i = 0
            for x in row:
                item = QTableWidgetItem(x)
                item.setForeground(QBrush(QColor(255, 255, 255)))
                item.setFont(font)

                self.tableWidget.setSortingEnabled(False)

                if(j == 1 and i <= 4):
                    self.tableWidget.insertColumn(i)

                self.tableWidget.setItem(j-1, i, QtWidgets.QTableWidgetItem(item))

                if (i == 4):
                    self.tableWidget.setColumnHidden(i, True);

                self.tableWidget.setSortingEnabled(True)

                i += 1

        self.tableWidget.horizontalHeader().resizeSection(0, 188)
        self.tableWidget.horizontalHeader().resizeSection(1, 155)
        self.tableWidget.horizontalHeader().resizeSection(2, 250)

        self.tableWidget.horizontalHeader().resizeSection(3, 66)
        self.tableWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)

        self.tableWidget.horizontalHeader().setStretchLastSection(True)



        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Как мне отредактировать мой код так, чтобы строки выглядели так, как на фотографии?

1 Ответ

1 голос
/ 13 октября 2019

Попробуйте:

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import (QMainWindow, QApplication, QWidget, QAction, 
         QTableWidget,QTableWidgetItem,QVBoxLayout, QAbstractItemView)
from PyQt5.QtGui import QPainter, QColor, QFont, QBrush


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(50, 50, 700, 500))

        font = QtGui.QFont()
        font.setPointSize(15)

        self.tableWidget.setFocusPolicy(QtCore.Qt.NoFocus)
        self.tableWidget.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.tableWidget.setSelectionMode(QAbstractItemView.SingleSelection)
        self.tableWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.tableWidget.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.tableWidget.verticalHeader().setVisible(False)
        self.tableWidget.horizontalHeader().setVisible(False)
        self.tableWidget.setShowGrid(False)

#        self.tableWidget.setStyleSheet("background-color: black; selection-background-color: #353535; border-radius: 10px")
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setRowCount(0)

        data = [["Login", "Routine", "03/05/2019", "IP Address", "Yes"], ["Login", "Routine", "03/05/2019", "IP Address", "Yes"], ["Login", "Routine", "03/05/2019", "IP Address", "Yes"]]

        j=0
        for row in data:
            self.tableWidget.insertRow(j)
            j += 1
            i = 0
            for x in row:
                item = QTableWidgetItem(x)
                item.setForeground(QBrush(QColor(255, 255, 255)))
                item.setFont(font)
                self.tableWidget.setSortingEnabled(False)

                if(j == 1 and i <= 4):
                    self.tableWidget.insertColumn(i)
                self.tableWidget.setItem(j-1, i, QtWidgets.QTableWidgetItem(item))

                if (i == 4):
                    self.tableWidget.setColumnHidden(i, True);
                self.tableWidget.setSortingEnabled(True)

                i += 1

        self.tableWidget.horizontalHeader().resizeSection(0, 188)
        self.tableWidget.horizontalHeader().resizeSection(1, 155)
        self.tableWidget.horizontalHeader().resizeSection(2, 250)
        self.tableWidget.horizontalHeader().resizeSection(3, 66)
        self.tableWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.tableWidget.horizontalHeader().setStretchLastSection(True)

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


stylesheet = """
    QTableWidget {
        background-color: black; 
        border-radius: 10px
    }

    QTableWidget::item {
        color: #ff7777;                    
        background-color: #2222fd;
        margin-top: 5px;          
        border-radius: 9px;
        padding-left: 5px;
    }

    QTableWidget::item:selected {
        background-color: yellow;
        color: blue;
    }
"""


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    app.setStyleSheet(stylesheet)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...