QTableWidget css selectors for last row and last column
-
wrote on 23 Nov 2023, 17:13 last edited by
I am not using the grid lines of QTableWidget.
Instead, i use:
QTableWidget::item { padding: 10px 10px 10px 10px; border:1px solid black; border-top:none; border-left:none; }
How can i have border-right:none for last column QTableWidgetItems and border-bottom:none for last row QTableWidgetItems?
-
wrote on 23 Nov 2023, 18:29 last edited by papinhio
Here is what i try:
File: table.py:
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'table.ui' # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not edit this file unless you know what you are doing. from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Dialog(object): def setupUi(self, Dialog): Dialog.setObjectName("Dialog") Dialog.resize(400, 300) self.gridLayout = QtWidgets.QGridLayout(Dialog) self.gridLayout.setObjectName("gridLayout") self.tableWidget = QtWidgets.QTableWidget(Dialog) self.tableWidget.setFocusPolicy(QtCore.Qt.NoFocus) self.tableWidget.setStyleSheet("QHeaderView::section{\n" " padding:10px;\n" " background:rgb(155, 255, 148);\n" "}\n" "\n" "QHeaderView::section:horizontal{\n" " border:1px solid #ABABAB;\n" " border-left:none;\n" "}\n" "\n" "QHeaderView::section:vertical{\n" " border:1px solid #ABABAB;\n" " border-top:none;\n" "}\n" "\n" "QTableCornerButton::section{\n" " background:white;\n" " border:1px solid #ABABAB;\n" " border-left:none;\n" " border-top:none;\n" "}") self.tableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows) self.tableWidget.setShowGrid(False) self.tableWidget.setObjectName("tableWidget") self.tableWidget.setColumnCount(20) self.tableWidget.setRowCount(18) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(4, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(6, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(7, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(8, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(9, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(10, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(11, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(12, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(13, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(14, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(15, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(16, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setVerticalHeaderItem(17, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(4, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(5, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(6, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(7, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(8, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(9, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(10, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(11, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(12, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(13, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(14, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(15, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(16, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(17, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(18, item) item = QtWidgets.QTableWidgetItem() self.tableWidget.setHorizontalHeaderItem(19, item) self.tableWidget.horizontalHeader().setHighlightSections(False) self.gridLayout.addWidget(self.tableWidget, 0, 0, 1, 1) self.retranslateUi(Dialog) QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog): _translate = QtCore.QCoreApplication.translate Dialog.setWindowTitle(_translate("Dialog", "Dialog")) item = self.tableWidget.verticalHeaderItem(0) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(1) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(2) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(3) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(4) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(5) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(6) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(7) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(8) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(9) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(10) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(11) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(12) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(13) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(14) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(15) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(16) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.verticalHeaderItem(17) item.setText(_translate("Dialog", "New Row")) item = self.tableWidget.horizontalHeaderItem(0) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(1) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(2) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(3) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(4) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(5) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(6) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(7) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(8) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(9) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(10) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(11) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(12) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(13) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(14) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(15) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(16) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(17) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(18) item.setText(_translate("Dialog", "New Column")) item = self.tableWidget.horizontalHeaderItem(19) item.setText(_translate("Dialog", "New Column")) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Dialog = QtWidgets.QDialog() ui = Ui_Dialog() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec_())
File: run_me.py:
from PyQt5 import QtWidgets, QtCore, QtGui from table import Ui_Dialog import os import sys class Run_me: def __init__(self): self.app = QtWidgets.QApplication(sys.argv) self.app.setStyle("Fusion") self.Dialog = QtWidgets.QDialog() self.ui = Ui_Dialog() self.ui.setupUi(self.Dialog) self.Dialog.show() self.ui.tableWidget.setItemDelegate(GridDelegate(self.ui.tableWidget)) sys.exit(self.app.exec_()) class GridDelegate(QtWidgets.QStyledItemDelegate): pen = QtGui.QPen(QtGui.QColor('#000000'), 1) def paint(self, qp, opt, index): qp.save() qp.setPen(self.pen) qp.setBrush(QtCore.Qt.NoBrush) lastRow = index.model().rowCount() - 1 lastCol = index.model().columnCount() - 1 if index.row() < lastRow and index.column() < lastCol: qp.drawLine(opt.rect.bottomLeft(), opt.rect.bottomRight()) qp.drawLine(opt.rect.topRight(), opt.rect.bottomRight()) elif index.row() == lastRow and index.column() == lastCol: pass elif index.row() == lastRow: qp.drawLine(opt.rect.topRight(), opt.rect.bottomRight()) elif index.column() == lastCol: qp.drawLine(opt.rect.bottomLeft(), opt.rect.bottomRight()) qp.restore() super().paint(qp, opt, index) if __name__ == "__main__": program = Run_me()
Result:
-
1/2