Увеличение доступного пространства в главном окне - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь создать приложение, используя pyqt python. Главное окно приложения заполнено множеством закрепляемых виджетов, некоторые закрепляющие виджеты просто используются для отображения определенных строковых данных. Эти виджеты занимают больше места.

enter image description here

ящик слева на изображении - мой интерес. Этот ящик открывается по щелчку мыши.

enter image description here

Можно ли как-нибудь скрыть эти виджеты сбоку от главного окна и открыть их при наведении мыши на них?

или если вы знаете какой-либо элемент пользовательского интерфейса pyqt, который может это сделать. пожалуйста, предложите.

1 Ответ

0 голосов
/ 06 ноября 2019

Логика состоит в том, чтобы обнаружить желаемое событие и показать виджет, в следующем примере обнаруживается щелчок по QGraphicsView, а затем отображается первоначально скрытый QDockWidget.

from PyQt5 import QtCore, QtGui, QtWidgets


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

        self.dock_widget = QtWidgets.QDockWidget()

        self.addDockWidget(QtCore.Qt.RightDockWidgetArea, self.dock_widget)

        list_widgets = QtWidgets.QListWidget()
        list_widgets.addItems(["item{}".format(i) for i in range(100)])

        self.dock_widget.setWidget(list_widgets)

        self.scene = QtWidgets.QGraphicsScene(self)
        self.view = QtWidgets.QGraphicsView(self.scene)
        it = self.scene.addRect(QtCore.QRectF(0, 0, 300, 400))
        it.setBrush(QtGui.QColor("white"))

        self.view.viewport().installEventFilter(self)

        self.setCentralWidget(self.view)

        self.dock_widget.hide()

        self.resize(640, 480)

        for i in range(4):
            self.menuBar().addAction("Action{}".format(i))

    def eventFilter(self, obj, event):
        if obj is self.view.viewport():
            if event.type() == QtCore.QEvent.MouseButtonPress:
                self.dock_widget.show()

        return super().eventFilter(obj, event)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)

    w = MainWindow()
    w.show()

    sys.exit(app.exec_())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...