如何让QDialog根据内容自动调整大小?

6 投票
2 回答
6774 浏览
提问于 2025-04-17 05:44

我在用PyQt4。

我想在一个QDialog里显示一个QTableWidget,这是我用的代码:

    w = QDialog()
    layout = QGridLayout()
    tw = QTableWidget(w)

    ... code to setup tw ...

    layout.addWidget(tw, 0, 0)
    w.setLayout(layout)
    w.exec_():

生成的QDialog运行得很好,但它只显示了QTableWidget的一部分,不管表格里有多少列。所以我得拖动边框来调整大小。

有没有办法让这个QDialog一开始就自动调整到合适的大小呢?

我试过用adjustSize()setSizePolicy(QSizePolicy(QSizePolicy.Expanding)),但都没用。

谢谢。

2 个回答

1

你可以试试

       w.resize(tw.width(),tw.height())
2

把你的表格设置成这样:

tw.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
tw.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
tw.horizontalHeader().hide()          
tw.verticalHeader().hide()

在你填充数据之后再调整它的大小:

tw.resizeRowsToContents()
tw.resizeColumnsToContents() 

然后像这样设置对话框的大小:

dialogWidth = tw.horizontalHeader().length() + 24
dialogHeight= tw.verticalHeader().length()   + 24
w.setFixedSize(dialogWidth, dialogHeight)

无论你的表格有多少行或列,以及表格单元格里有什么内容,对话框都会自动调整到合适的大小。

撰写回答