python qt : automatically resizing main window to fit content
Solution 1
You can do something like this, from within your MainWindow
after placing all the elements you need in the layout:
self.setFixedSize(self.layout.sizeHint())
This will set the size of the MainWindow
to the size of the layout, which is calculated using the size of widgets that are arranged in the layout.
Solution 2
I think overriding sizeHint() on the QTableWidget is the key:
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_())
Vince
Updated on September 11, 2020Comments
-
Vince almost 4 years
I have a main window which contains a main widget, to which a vertical layout is set. To the layout is added a
QTableWidget
only (for the moment).When I start the application and call show on the main_window, only part of the
QTableWidget
is shown. I can extend the window manually to see it all, but I would like the window to have its size nicely adapted to the size of theQTableWidget
.Googling the question found a lot of posts on how to use resize to an arbitrary size, and call to
resize(int)
works fine, but this is not quite what I am askingLots of other posts are not explicit enough, e.g "use sizePolicy" or "use
frameGeometry
" or "use geometry" or "usesizeHint
". I am sure all of them may be right, but an example on how to would be awesome.