2016-01-06 547 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_()) 
相關問題