如何在QMainWindow中为QDockWidget调用resizeEvent函数

问题描述 投票:0回答:1

我正在尝试使用centralWidget和dockWidget实现QMainWindow。当用户调整停靠小部件的大小时,我希望为停靠小部件调用resizeEvent并返回一些值。我已经为完整的QMainWindow实现了resizeEvent,它工作正常。我如何为不作为另一个从Qwidget继承并在其中实现resizeEvent的类以及随后在QMainwindow中创建对象的类创建一个名为Qwidget的dockWidget的resizeEvent。第一个给出的示例工作正常。

class ui(QMainWindow):
    def __init__(self):
        super().__init__()

        self.bottom_dock_widget = DockWidget('Results')
        self.addDockWidget(Qt.BottomDockWidgetArea, self.bottom_dock_widget)

        self.resize(500, 500)

    def resizeEvent(self, event):
        print('mainWindow')
        self.update()

class DockWidget(QDockWidget):
    def __init__(self, name, image_view):
        super().__init__()
        self.setWindowTitle(name)
    def resizeEvent(self, event):
        print('in Dock')
        self.update()

是否有一种方法可以实现这样的示例:

class ui(QMainWindow):
    def __init__(self):
        super().__init__()

        self.bottom_dock_widget = QDockWidget('Results')
        self.addDockWidget(Qt.BottomDockWidgetArea, self.bottom_dock_widget)
        self.resize(500, 500)

但是仅能够为停靠窗口小部件调用resizeEvent

    def resizeEvent(self, event):
        print('dock')
        self.update()

类似于具有范围的c ++

def bottom_dock_widget :: resizeEvent(self):
python pyqt pyqt5
1个回答
0
投票

[如果您想听到窗口小部件的调整大小事件,则不必重写resizeEvent()方法,因为它足以安装分析了QEvent::Resize事件的事件过滤器

import sys

from PyQt5.QtCore import QEvent, Qt
from PyQt5.QtWidgets import QApplication, QDockWidget, QMainWindow


class UI(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.bottom_dock_widget = QDockWidget("Results")
        self.bottom_dock_widget.installEventFilter(self)
        self.addDockWidget(Qt.BottomDockWidgetArea, self.bottom_dock_widget)
        self.resize(500, 500)

    def eventFilter(self, obj, event):
        if obj is self.bottom_dock_widget and event.type() == QEvent.Resize:
            print("dock")
        return super().eventFilter(obj, event)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    w = UI()
    w.show()
    sys.exit(app.exec_())
© www.soinside.com 2019 - 2024. All rights reserved.