我正在使用Python / PySide制作基于Qt的GUI来查看和比较图像。为此我使用QMdiArea
和QMdiSubWindows
。每个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_())