我有一个主窗口,其中包含一个主窗口小部件,其中设置了垂直布局。仅为布局添加QTableWidget
(暂时)。
当我启动应用程序并在main_window上调用show时,只显示部分QTableWidget
。我可以手动扩展窗口以查看所有内容,但我希望窗口的大小很好地适应QTableWidget
的大小。
谷歌搜索问题发现很多帖子关于如何使用调整大小到任意大小,并调用resize(int)
工作正常,但这不是我要求的
很多其他帖子都不够明确,例如“使用sizePolicy”或“使用frameGeometry
”或“使用几何”或“使用sizeHint
”。我相信他们所有人都可能是正确的,但这是一个如何令人敬畏的例子。
答案 0 :(得分:3)
在布局后放置所需的所有元素后,您可以在MainWindow
内执行此类操作:
self.setFixedSize(self.layout.sizeHint())
这会将MainWindow
的大小设置为布局的大小,这是使用布局中排列的小部件的大小计算的。
答案 1 :(得分: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_())
答案 2 :(得分:0)
您可以使用sizeHint()
,但不能按照其他答案中的说明使用。 sizeHint()
返回具有宽度和高度的QSize
对象。假设您有一个主窗口mainWindow
和一个名为content
的小部件。如果您调整大小需要content
来变大,则可以像这样使mainWindow
适应它:
mainWindow.resize(mainWindow.sizeHint().width,
mainWindow.size().height() + content.sizeHint().height());
答案 3 :(得分:0)
年纪大了,但我有一段时间经历了,并且看到这里的答案对我来说并不完全有效。
这就是我所做的:
请确保已正确设置“主窗口”的中央小部件,并且布局的父级是中央小部件, 然后根据需要为主窗口/窗口小部件设置一个大小策略。
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_())