How do I add a layout to a Qtablewidget in pyqt?

荒凉一梦 提交于 2019-12-11 04:58:40

问题


I have my qtablewidget defined like this:

def __init__(self, parent = None):
        super(Window, self).__init__(parent)
        QtGui.QWidget.__init__(self)
        QtGui.QTableWidget.setMinimumSize(self, 500, 500)
        QtGui.QTableWidget.setWindowTitle(self, "Custom table widget")
        self.table = QtGui.QTableWidget()
        rowf = 3
        self.table.setColumnCount(3)
        self.table.setRowCount(rowf)
        self.table.setHorizontalHeaderItem(0, QtGui.QTableWidgetItem("col1"))
        self.table.setHorizontalHeaderItem(1, QtGui.QTableWidgetItem("col2"))
        self.table.setHorizontalHeaderItem(2, QtGui.QTableWidgetItem("col3"))
        self.table.verticalHeader().hide()

        header = self.table.horizontalHeader()
        header.setResizeMode(0, QtGui.QHeaderView.ResizeToContents)
        header.setResizeMode(1, QtGui.QHeaderView.ResizeToContents)
        header.setResizeMode(2, QtGui.QHeaderView.ResizeToContents)

        self.buttonBox = QtGui.QDialogButtonBox(self)
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Ok)

        self.verticalLayout = QtGui.QVBoxLayout(self)
        self.verticalLayout.addWidget(self.table)
        self.verticalLayout.addWidget(self.buttonBox)

        self.buttonBox.accepted.connect(self.close)
        self.buttonBox.rejected.connect(self.close)

I would like my end result to look something similar to the pic below but right now, the layout that I'm trying to add doesn't quiet work the way I'd like it to. I'm a beginner at pyqt. I've tried this layout before on a qlistview and it worked well.


回答1:


add {your table}.table.horizontalHeader().setStretchLastSection(True) and/or {your table}.verticalHeader().setStretchLastSection(True)

import sys

from PyQt4 import QtGui
from PyQt4 import QtCore


class Window(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent=parent)
        QtGui.QTableWidget.setMinimumSize(self, 500, 500)
        QtGui.QTableWidget.setWindowTitle(self, "Custom table widget")
        self.table = QtGui.QTableWidget()
        rowf = 3
        self.table.setColumnCount(3)
        self.table.setRowCount(rowf)
        self.table.setHorizontalHeaderItem(0, QtGui.QTableWidgetItem("col1"))
        self.table.setHorizontalHeaderItem(1, QtGui.QTableWidgetItem("col2"))
        self.table.setHorizontalHeaderItem(2, QtGui.QTableWidgetItem("col3"))
        self.table.horizontalHeader().setStretchLastSection(True)
        # self.table.verticalHeader().setStretchLastSection(True)

        self.buttonBox = QtGui.QDialogButtonBox(self)
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel | QtGui.QDialogButtonBox.Ok)

        self.verticalLayout = QtGui.QVBoxLayout(self)
        self.verticalLayout.addWidget(self.table)
        self.verticalLayout.addWidget(self.buttonBox)

        self.buttonBox.accepted.connect(self.close)
        self.buttonBox.rejected.connect(self.close)

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    w = Window()
    w.show()
    sys.exit(app.exec_())

Only Horizontal:

Only Vertical:

Vertical and Horizontal:



来源:https://stackoverflow.com/questions/41319407/how-do-i-add-a-layout-to-a-qtablewidget-in-pyqt

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!