【问题标题】:PyQt4-PySide - Formatting a table widgetPyQt4-PySide - 格式化表格小部件
【发布时间】:2013-03-08 07:09:57
【问题描述】:

在下面的代码中,例如,我想在第 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_())

【问题讨论】:

    标签: python pyqt pyqt4 pyside styling


    【解决方案1】:

    【讨论】:

    • 您如何将其定位到特定列?在 PyQt 而不是纯 Qt 中它是什么样的?
    【解决方案2】:

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

    首先,创建一个委托并覆盖其绘制方法以进行您想要的自定义。

    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.tableQtGui.QTableWidget() 的一个实例

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      相关资源
      最近更新 更多