There does not appear to be any problem here, as Qt is correctly reporting the number of units scrolled by the mouse wheel.
Some mouse drivers support accelerated scrolling, which means that the number of reported scroll units is progressively increased when the wheel is rotated more rapidly. The units are 0.125 of a degree, and most mice have a baseline scroll speed of 120 units per "notch". Acceleration simply multiplies the baseline speed by an increasing factor as the wheel is rotated faster (i.e. 120, 240, 360, etc).
So in a QWheelEvent, the number of "notches" scrolled is calculated by:
# PyQt5/PySide2
event.angleDelta().y() // baseline_speed
# PyQt4/PySide
event.delta() // baseline_speed
which is exactly what the example code in the question already does.
if you want to regsiter each "notch/step" separately, you could just use a loop:
steps = event.angleDelta().y() // 120
vector = steps and steps // abs(steps) # 0, 1, or -1
for step in range(1, abs(steps) + 1):
self.x += vector
print(self.x)
Or you could ignore the acceleration, and just register the vector for each wheel event:
delta = event.angleDelta().y()
self.x += (delta and delta // abs(delta))
print(self.x)