Как создать QScrollArea, содержащее QDockWidget и добавить его справа от QHBoxLayout? - PullRequest
0 голосов
/ 30 марта 2020

UDPATE: Возможно, я понял, что QDockWidget не подходит для go. Я разместил новый вопрос здесь: PyQt: можно ли перетаскивать QWidgets в QGridLayout, чтобы изменить их порядок?

Исходный вопрос:

Я пытаюсь создать прокручиваемую область, содержащую два столбца нескольких закрепляемых виджетов. Кроме того, я хотел бы, чтобы область прокручиваемой док-станции была размещена справа в QHBoxLayout. Прямо сейчас у меня есть один столбец QDockWidgets без прокрутки и QTextEdit в качестве моего центрального виджета.

Я хотел бы помочь интегрировать следующее:

  1. Добавить возможность для другого столбец QDockWidgets
  2. Отключить функцию для отстыковки в новом окне. Я все еще хотел бы переставить доки
  3. Добавить scrollarea и полосу прокрутки в dockarea
  4. Я хотел бы, чтобы макет был QHBoxLayout с dockarea справа.

Изображение показывает, что у меня есть и чего я хочу. Надеюсь, что вы можете помочь!

enter image description here

from PyQt5 import QtCore, QtWidgets, QtGui

from matplotlib.figure import Figure
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
import random

class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)


        self.textEdit = QtWidgets.QTextEdit()
        self.setCentralWidget(self.textEdit)

        # First dock
        dock1 = QtWidgets.QDockWidget("dock 1", self)
        dock1.setAllowedAreas(QtCore.Qt.RightDockWidgetArea)
        dock1.setFloating(False)

        self.figure1 = Figure()  # a figure to plot on
        self.canvas1 = FigureCanvas(self.figure1)
        self.ax1 = self.figure1.add_subplot(111)  # create an axis
        data = [random.random() for i in range(10)]
        self.ax1.plot(data, '*-')  # plot data
        self.canvas1.draw()  # refresh canvas

        dock1.setWidget(self.canvas1)
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock1)

        # Second dock
        dock2 = QtWidgets.QDockWidget("dock 2", self)
        dock2.setAllowedAreas(QtCore.Qt.RightDockWidgetArea)

        self.figure2 = Figure()  # a figure to plot on
        self.canvas2 = FigureCanvas(self.figure2)
        self.ax2 = self.figure2.add_subplot(111)  # create an axis
        data = [random.random() for i in range(10)]
        self.ax2.plot(data, '*-')  # plot data
        self.canvas2.draw()  # refresh canvas

        dock2.setWidget(self.canvas2)
        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, dock2)


# import dockwidgets_rc

if __name__ == '__main__':
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
...