Как заставить QDockWidget расширяться, чтобы заполнить все доступное пространство? И почему я не могу поставить рядом больше двух доков?

#python #matplotlib #pyqt5 #qdockwidget

Вопрос:

Я создаю приложение в pyqt5 для построения нескольких фигур рядом и выше/ниже друг друга, и я хочу, чтобы графики были закреплены. Результат ведет себя не так, как я хочу/ожидал бы, и после долгого поиска ответов/решений в Интернете я все еще не знаю, почему.

Пока что это мой код:

 from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure from PyQt5 import QtWidgets, QtCore import traceback import logging   def exception_hook(exc_type, exc_value, exc_tb):  tb = "".join(traceback.format_exception(exc_type, exc_value, exc_tb))  logging.error('n'   tb)  QtWidgets.QApplication.quit()   class PlotWindow(QtWidgets.QMainWindow):  def __init__(self, parent=None):  super(PlotWindow, self).__init__(parent=parent)  self.setWindowTitle('plot window')  self.setCentralWidget(QtWidgets.QWidget(self))   def add_figure(self, figure):  mplCanvas = FigureCanvas(figure)  mplCanvas.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)  dockableMplCanvas = QtWidgets.QDockWidget(self)  dockableMplCanvas.setWidget(mplCanvas)  self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dockableMplCanvas)   if __name__ == '__main__':  import sys   logging.basicConfig(level=logging.DEBUG)  logging.getLogger('matplotlib').setLevel(logging.ERROR)  sys.excepthook = exception_hook   app = QtWidgets.QApplication(sys.argv)   pw = PlotWindow()   for _ in range(4):  fig = Figure(tight_layout=True)  ax = fig.add_subplot()  pw.add_figure(fig)   pw.show()   exit(app.exec_())  

Это приводит к следующему:

введите описание изображения здесь

Если я теперь переставлю графики, сначала поместив один из них слева от трех других:

введите описание изображения здесь

..And then putting one underneath the one on the left:

введите описание изображения здесь

Теперь, если я масштабирую окно, пространство между двумя столбцами графиков расширяется, но графики не расширяются, чтобы заполнить пространство:

введите описание изображения здесь

Это почему? и как я могу это исправить?

Комментарии:

1. Если у вас есть N вопросов, создайте N сообщений. Таким образом, сообщение должно содержать только один конкретный вопрос, наличие большого количества вопросов подразумевает, что ваше сообщение слишком широкое, чтобы его можно было закрыть.

2. @eyllanesc хорошо, точка принята.

Ответ №1:

Центральный виджет изменяет размер, чтобы заполнить пространство между двумя столбцами графиков, решение состоит в том, чтобы добавить:

 self.centralWidget().setFixedSize(0, 0)  

чтобы предотвратить расширение центрального виджета