Рассмотрим этот пример PyQT5, назовем его test.py
(для меня поведение одинаково при обоих python2
и python3
в Ubuntu 18.04):
#!/usr/bin/env python
from __future__ import print_function
import sys, os
from PyQt5 import QtCore, QtWidgets, QtGui
class PhotoViewer(QtWidgets.QGraphicsView):
def __init__(self, parent):
super(PhotoViewer, self).__init__(parent)
self.parent = parent
#self.resetMatrix() # SO: 39101834, but "AttributeError: 'PhotoViewer' object has no attribute 'resetMatrix'"
self.scale(1.0, 1.0)
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
QtWidgets.QMainWindow.__init__(self)
self.setWindowTitle("test.py")
self.setMinimumWidth(1000)
self.setMinimumHeight(600)
self.viewer = PhotoViewer(self)
wid = QtWidgets.QWidget(self)
self.setCentralWidget(wid)
VBlayout = QtWidgets.QVBoxLayout()
VBlayout.addWidget(self.viewer)
wid.setLayout(VBlayout)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
main = MainWindow()
main.show()
sys.exit(app.exec_())
Если я запускаю его как есть, он работает нормально, без проблем.
Если я раскомментирую закомментированную строку self.resetMatrix()
, программа завершится с ошибкой:
$ python test.py
Traceback (most recent call last):
File "test.py", line 29, in <module>
main = MainWindow()
File "test.py", line 20, in __init__
self.viewer = PhotoViewer(self)
File "test.py", line 11, in __init__
self.resetMatrix() # SO: 39101834, but "AttributeError: 'PhotoViewer' object has no attribute 'resetMatrix'"
AttributeError: 'PhotoViewer' object has no attribute 'resetMatrix'
Но я нахожу это довольно странным, потому что PhotoViewer
наследуется от QGraphicsView
, вызов PhotoViewer.scale()
, который является QGraphicsView
методом, явно не проблема - и Как сбросить масштаб в QGraphicsView? документы, которые могут быть вызваны QGraphicsView()->resetMatrix()
, а также документировано для:
Какую ошибку я совершаю - почему я не могу позвонить resetMatrix
в этом случае; и что я должен сделать, чтобы иметь возможность вызывать эту функцию?