首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt4-PySide -格式化表格小部件

PyQt4-PySide -格式化表格小部件
EN

Stack Overflow用户
提问于 2013-03-19 22:35:53
回答 2查看 4K关注 0票数 2

例如,在下面的代码中,我想在第2列和第3列之间使用较粗的规则分隔符。我如何才能做到这一点?

代码语言:javascript
复制
#! /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_())
EN

回答 2

Stack Overflow用户

发布于 2013-03-20 01:59:19

票数 0
EN

Stack Overflow用户

发布于 2020-05-05 22:54:51

这不是一个完整或理想的解决方案,但它在某种程度上是相关的,可能有助于取得进展。我发现了一个在Qt中更改整个单元格边框的示例,并将其翻译为PyQt。

首先,创建一个代理并覆盖其paint方法以执行所需的自定义。

代码语言:javascript
复制
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

然后在你的表中

代码语言:javascript
复制
delegate = TableBorderDelegate()
self.table.setItemDelegate(delegate) 

其中self.tableQtGui.QTableWidget()的实例

Qt解决方案来自https://stackoverflow.com/a/7264248/6605826。我在https://github.com/baoboa/pyqt5/blob/master/examples/itemviews/spinboxdelegate.py中找到了一个使用委托的pyqt示例,这是一个不相关的pyqt委托

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15502390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档