-1

我有一个关于 PyQt5 和 QMdiSubWindow 中调整大小的小部件的问题:小部件 QTableWidget 应该占据窗口的所有宽度,但它只保持在中心,宽度固定。

这是一些代码:

class ProductDatasheetWindow(QMdiSubWindow):
    def __init__(self, product):
        super().__init__()
        self.product = product
        self.setWindowTitle("Liste produit")
        main_layout = QVBoxLayout(self)
        main_widget = QGroupBox()
        main_widget.setLayout(main_layout)
        main_widget.setSizePolicy(QSizePolicy.Maximum,QSizePolicy.Preferred)
        self.setWidget(main_widget)

VBoxLayout 包含一些信息(一些 QLabels)和底部的 QTableWidget:

...table_attributs_valeurs = QTableWidget(len(product.attributes), 2,self)...

这是我在构造函数中添加的一些代码:

table_attributs_valeurs.setContentsMargins(0, 0, 0, 0)
main_layout.setContentsMargins(0,0,0,0)
main_layout.addWidget(table_attributs_valeurs, 0, Qt.AlignJustify)
table_attributs_valeurs.setSizePolicy(QSizePolicy.Maximum,QSizePolicy.Preferred)
4

1 回答 1

0

这是我的最小示例,编写它帮助我理解 Qt 并且它有效:

from PyQt5.QtWidgets import QMdiSubWindow, QApplication, QVBoxLayout, QLabel, QWidget, QTableWidget, QTableWidgetItem
import sys


class Win(QMdiSubWindow):
    def __init__(self):
        QMdiSubWindow.__init__(self)
        self.setMinimumSize(300,200)
        main_widget=QWidget()
        layout=QVBoxLayout(main_widget)
        layout.addWidget(QLabel("numéro 1",self),0, Qt.AlignCenter)
        layout.addWidget(QLabel("numéro 2",self), 0, Qt.AlignCenter)
        main_widget.setLayout(layout)
        self.setWidget(main_widget)

        table=QTableWidget(3,2,self)
        att_title=QTableWidgetItem("Attribut")
        att_title.setTextAlignment(Qt.AlignCenter)
        table.setHorizontalHeaderItem(0, att_title)
        att_value=QTableWidgetItem("Valeur")
        table.setHorizontalHeaderItem(1, att_value)
        table.verticalHeader().setVisible(False)
        header=table.horizontalHeader()
        header.setSectionResizeMode(0,QtWidgets.QHeaderView.Stretch)
        header.setSectionResizeMode(1,QtWidgets.QHeaderView.Stretch)

        for row in range(3):
            for col in range(2):
                item=QTableWidgetItem("row {}, col {}".format(str(row),str(col)))
                item.setTextAlignment(Qt.AlignCenter)
                table.setItem(row,col,item)
        layout.addWidget(table)
        # layout.addStretch()




if __name__=="__main__":
    app = QApplication(sys.argv)
    win=Win()
    win.show()
    app.exec_()
于 2019-07-30T07:32:08.787 回答