在QMdiArea窗口之间切换更改视图

时间:2014-08-21 17:27:17

标签: python qt user-interface pyside

我正在使用Python / PySide制作基于Qt的GUI来查看和比较图像。为此我使用QMdiAreaQMdiSubWindows。每个QMdiSubWindow都有一个QGraphicsView作为其中心窗口小部件。我想查看时间序列的图像,通过子窗口之间的Ctrl-Tabbing直观地比较它们。

我的问题是,如果我最大化QSubWindows并尝试在它们之间使用Ctrl-Tab,它会在从SubWindow 1切换到SubWindow 2时按预期工作。但是,当我按Ctrl-Tab返回SubWindow 1时,视口变化几个像素。也就是说,每当我切换到不同的子窗口并再次返回时,滚动条会向左移动,使图像向右移动一点。

当子窗口最大化时,这只是一个问题。如果我平铺他们的东西按预期工作。 知道为什么会这样(功能或错误)吗? 我怎么能阻止它发生?我是否需要手动跟踪视图矩形或滚动条值?

这是一个最小的工作示例:

import sys
from PySide import QtCore, QtGui

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()

        self._mdiArea = QtGui.QMdiArea()
        self.setCentralWidget(self._mdiArea)

        self._scene = QtGui.QGraphicsScene()

        pixmap = QtGui.QPixmap('/path/to/veryLargImage(12000x12000).tif')

        self._scene.setBackgroundBrush(QtGui.QBrush(QtCore.Qt.black, QtCore.Qt.SolidPattern))
        self._scene.addPixmap(pixmap)

        for i in range(2):
            win = SubWindow('Image {}'.format(i), scene=self._scene)
            self._mdiArea.addSubWindow(win)

        self.showMaximized()

class SubWindow(QtGui.QMdiSubWindow):

    def __init__(self, title='', scene=None, parent=None):
        super(SubWindow, self).__init__(parent)

        self._view = QtGui.QGraphicsView()
        self.setWidget(self._view)

        # Connect a scene to the view
        self._view.setScene(scene)
        self._view.setWindowTitle(title)

        self.setWindowTitle(title)


if __name__ == '__main__': 
    app = QtGui.QApplication(sys.argv)
    win = MainWindow()

    sys.exit(app.exec_())

0 个答案:

没有答案