как увеличить высоту строки и ширину столбца виджета таблицы - PullRequest
0 голосов
/ 01 октября 2018

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

Ниже приведен мой код:

from PyQt4 import QtGui
import sys

imagePath = "pr.png"

class ImgWidget1(QtGui.QLabel):

    def __init__(self, parent=None):
        super(ImgWidget1, self).__init__(parent)
        pic = QtGui.QPixmap(imagePath)
        self.setPixmap(pic)

class ImgWidget2(QtGui.QWidget):

    def __init__(self, parent=None):
        super(ImgWidget2, self).__init__(parent)
        self.pic = QtGui.QPixmap(imagePath)

    def paintEvent(self, event):
        painter = QtGui.QPainter(self)
        painter.drawPixmap(0, 0, self.pic)


class Widget(QtGui.QWidget):

    def __init__(self):
        super(Widget, self).__init__()
        tableWidget = QtGui.QTableWidget(10, 2, self)
        # tableWidget.horizontalHeader().setStretchLastSection(True)
        tableWidget.resizeColumnsToContents()
        # tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        # tableWidget.setFixedWidth(tableWidget.columnWidth(0) + tableWidget.columnWidth(1))
        tableWidget.resize(400,600)
        tableWidget.setCellWidget(0, 1, ImgWidget1(self))
        tableWidget.setCellWidget(1, 1, ImgWidget2(self))

if __name__ == "__main__":
    app = QtGui.QApplication([])
    wnd = Widget()
    wnd.show()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 01 октября 2018

Когда виджеты внутри QTableWidget на самом деле не являются содержимым таблицы, они помещаются поверх нее, поэтому resizeColumnsToContents() делает размер ячеек очень маленьким, поскольку он не учитывает размерВ этих виджетах resizeColumnsToContents() учитывается содержимое, сгенерированное QTableWidgetItem.

С другой стороны, если вы хотите установить высоту и ширину ячеек, вы должны использовать заголовки, в следующем примереразмер по умолчанию устанавливается с помощью setDefaultSectionSize():

class Widget(QtGui.QWidget):
    def __init__(self):
        super(Widget, self).__init__()
        tableWidget = QtGui.QTableWidget(10, 2)

        vh = tableWidget.verticalHeader()
        vh.setDefaultSectionSize(100)
        # vh.setResizeMode(QtGui.QHeaderView.Fixed)

        hh = tableWidget.horizontalHeader()
        hh.setDefaultSectionSize(100)
        # hh.setResizeMode(QtGui.QHeaderView.Fixed)

        tableWidget.setCellWidget(0, 1, ImgWidget1())
        tableWidget.setCellWidget(1, 1, ImgWidget2())

        lay = QtGui.QVBoxLayout(self)
        lay.addWidget(tableWidget)

Если вы хотите, чтобы размер не мог изменяться пользователем, раскомментируйте строки.

...