首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python qt :自动调整主窗口大小以适应内容

python qt :自动调整主窗口大小以适应内容
EN

Stack Overflow用户
提问于 2016-01-06 23:44:40
回答 4查看 27.8K关注 0票数 7

我有一个主窗口,其中包含一个设置了垂直布局的主小部件。在布局中只添加了一个QTableWidget (暂时)。

当我启动应用程序并在main_window上调用show时,只显示了QTableWidget的一部分。我可以手动扩展窗口以查看所有内容,但我希望窗口的大小能很好地适应QTableWidget的大小。

在谷歌上搜索这个问题,发现了很多关于如何将大小调整为任意大小的帖子,调用resize(int)工作得很好,但这并不是我想问的

许多其他帖子不够明确,例如“使用sizePolicy”或“使用frameGeometry”或“使用几何”或“使用sizeHint”。我相信他们可能都是对的,但是一个关于如何做到这一点的例子将是非常棒的。

EN

回答 4

Stack Overflow用户

发布于 2016-01-07 02:42:08

在布局中放置所需的所有元素后,您可以在MainWindow中执行以下操作:

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

这会将MainWindow的大小设置为布局的大小,该大小是使用布局中排列的小部件的大小计算得出的。

票数 4
EN

Stack Overflow用户

发布于 2016-12-06 13:16:54

我认为在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_())
票数 1
EN

Stack Overflow用户

发布于 2020-09-10 22:55:47

老了,但我有一段时间经历了这一点,并看到这里的答案对我来说并不完全有效。

下面是我所做的:

请确保正确设置了'mainwindow‘的中心小部件,并且布局的父部件是中心小部件,然后根据需要设置主窗口/小部件的大小策略。

from PyQt5 import QtCore, QtGui, QtWidgets
import sys

class RandomWidget(QtWidgets.QWidget):

    def __init__(self, parent=None):
        super(RandomWidget, self).__init__(parent)
        self.layout = QtWidgets.QVBoxLayout()
        self.setLayout(self.layout)
        self.ui()
        self.layout.addWidget(self.table)
        self.layout.addWidget(self.table2)

    def ui(self):
        self.table = QtWidgets.QTableWidget()
        self.table.setMinimumSize(800,200)
        self.table2 = QtWidgets.QTableWidget()

class Mainwindow(QtWidgets.QMainWindow):

    def __init__(self):
        self.widget = None
        super(Mainwindow, self).__init__()
        self.setWindowTitle('test')

    def ui(self):
        self.setCentralWidget(self.widget)
        self.show()
    

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    Window = Mainwindow()
    Window.widget = RandomWidget(Window)
    Window.ui()
    sys.exit(app.exec_()) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34637099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档