例如,在下面的代码中,我想在第2列和第3列之间使用较粗的规则分隔符。我如何才能做到这一点?
#! /usr/bin/env python2.7
# -*- coding: utf-8 -*-
import sys
from PySide import QtCore, QtGui
class MainWindow(QtGui.QWidget):
def __init__(
self,
parent = None
):
super(MainWindow, self).__init__(parent)
# General grid
self.table = QtGui.QTableWidget(self)
self.nbrow, self.nbcol = 9, 9
self.table.setRowCount(self.nbrow)
self.table.setColumnCount(self.nbcol)
# Each cell has dimension 50 pixels x 50 pixels
for row in range(0, self.nbrow):
self.table.setRowHeight(row, 50)
for col in range(0, self.nbcol):
self.table.setColumnWidth(col, 50)
# Each cell contains one single QTableWidgetItem
for row in range(0, self.nbrow):
for col in range(0, self.nbcol):
item = QtGui.QTableWidgetItem()
item.setTextAlignment(
QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter
)
self.table.setItem(row, col, item)
# Header formatting
font = QtGui.QFont()
font.setFamily(u"DejaVu Sans")
font.setPointSize(12)
self.table.horizontalHeader().setFont(font)
self.table.verticalHeader().setFont(font)
# Font used
font = QtGui.QFont()
font.setFamily(u"DejaVu Sans")
font.setPointSize(20)
self.table.setFont(font)
# Global Size
self.resize(60*9, 60*9 + 20)
# Layout of the table
layout = QtGui.QGridLayout()
layout.addWidget(self.table, 0, 0)
self.setLayout(layout)
# Set the focus in the first cell
self.table.setFocus()
self.table.setCurrentCell(0, 0)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
fen = MainWindow()
fen.show()
sys.exit(app.exec_())发布于 2013-03-20 01:59:19
发布于 2020-05-05 22:54:51
这不是一个完整或理想的解决方案,但它在某种程度上是相关的,可能有助于取得进展。我发现了一个在Qt中更改整个单元格边框的示例,并将其翻译为PyQt。
首先,创建一个代理并覆盖其paint方法以执行所需的自定义。
class TableBorderDelegate(QtGui.QItemDelegate):
"""Delegate for customizing cell borders"""
def paint(self, painter, option, index):
"""Overrides paint to put a red border around cells in column 3"""
if index.column() == 3: # index.row() is also a thing
painter.setPen(QtGui.QColor(255, 0, 0))
painter.drawRect(option.rect)
QtGui.QItemDelegate.paint(self, painter, option, index)
# End of class TableBorderDelegate然后在你的表中
delegate = TableBorderDelegate()
self.table.setItemDelegate(delegate) 其中self.table是QtGui.QTableWidget()的实例
Qt解决方案来自https://stackoverflow.com/a/7264248/6605826。我在https://github.com/baoboa/pyqt5/blob/master/examples/itemviews/spinboxdelegate.py中找到了一个使用委托的pyqt示例,这是一个不相关的pyqt委托
https://stackoverflow.com/questions/15502390
复制相似问题