2016-01-06 65 views
1

我有一个主窗口,其中包含一个主窗口小部件,其中设置了垂直布局。仅在布局中添加QTableWidget(目前)。python qt:自动调整主窗口的大小以适应内容

当我在main_window上启动应用程序并调用show时,只显示QTableWidget的一部分。我可以手动扩展窗口以查看它,但我希望窗口的大小适合QTableWidget的大小。

谷歌搜索的问题,发现了很多关于如何使用调整到任意大小,并调用来调整(INT INT)正常工作职位,但是这并不完全符合我要求

许多其他职位不够明确,例如“use sizePolicy”或“use frameGeometry”或“use geometry”或“use sizeHint”。我相信他们都可能是对的,但是如何成为真棒的例子。

+0

我愿意打赌,有什么不对您设置布局/部件的方式。在适当的布局情况下,您的主窗口永远不会缩小到小于封闭的tablewidgets最小尺寸。您需要提供一些代码示例。 – ThorngardSO

回答

2

你可以把所有你在布局中需要的元素后,做你MainWindow中这样的事情,从:

self.setFixedSize(self.layout.sizeHint()) 

这将MainWindow的大小设置为布局的大小,这是使用布局中排列的小部件的大小进行计算。

+0

嗨,似乎没有工作......我试过sizeHint不同的对象,它返回的东西似乎不匹配任何东西 - ; – Vince

0

我觉得在QTableWidget的覆盖sizeHint()是关键:

import sys 
from PyQt5.QtCore import QSize 
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget 

class Table(QTableWidget): 
    def sizeHint(self): 
    horizontal = self.horizontalHeader() 
    vertical = self.verticalHeader() 
    frame = self.frameWidth() * 2 
    return QSize(horizontal.length() + vertical.width() + frame, 
       vertical.length() + horizontal.height() + frame) 

class Main(QMainWindow): 
    def __init__(self, parent=None): 
    super(Main, self).__init__(parent) 
    top = Table(3, 5, self) 
    self.setCentralWidget(top) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    main = Main() 
    main.show() 
    sys.exit(app.exec_()) 
相关问题